Я решил потратить несколько часов на попытки защитить свой сайт с помощью SSL. Сервер работает нормально, но мой PHP $_SESSION столкнулся с проблемой. Я понимаю проблему передачи идентификаторов сеанса между HTTP и HTTPS, но здесь этого не происходит (я думаю). Запутанная последовательность сеансов выглядит примерно так:
логин.html:
<form action="https://www.mydomain.com/login.php">
логин.php:
if login details correct {
session_set_cookie_params(3600,'/','mydomain.com',true);
session_start();
$_SESSION['...
session_commmit
На этом этапе login.js (который управляет диалоговым окном в стиле AJAX) будет перенаправлять на http://www.mydomain.com/desktop.html. Код JS, поддерживающий HTML, затем срабатывает
$.ajax({ url: "https://www.mydomain.com/lib/mySQL/mySQL.php", ... });
mySQL.php:
if (!isset($_COOKIE['PHPSESSID'])) {
throw wobbly
До того, как я перешел на HTTPS, эта последовательность отлично работала во всех браузерах; с HTTPS он шатается во всех браузерах :( Я могу подтвердить (посмотрев на данные cookie), что Firefox записывает cookie следующим образом:
mydomain.com
Name: PHPSESSID
Content: gobbledygook
Domain: .mydomain.com
Path: /
Send For: Encrypyed connections only.
Expires: in 1hr.
Все выглядит как в книге. Есть ли у вас какие-либо предложения относительно того, что происходит?
Спасибо.
PS: я не использовал session_set_cookie_params до того, как наткнулся на сообщение на SO при исследовании этой проблемы, предполагая, что мне следует это сделать. То есть до того, как я установил secure=true, Firefox «отправлял» любые подключения, и это тоже не сработало.
РЕДАКТИРОВАТЬ: я наблюдаю еще одну деталь. Я ожидаю, что на панели «Сеть» в Firebug мои запросы AJAX будут отображаться как «POST https://www.mydomain.com/lib/mySQL/mySQL.php", и я смогу выбрать райдер POST и посмотреть, что получилось. Я не понимаю этого для неудачного запроса. Как ни странно, Firebug отображает «ВАРИАНТЫ https://www.mydomain.com/lib/mySQL/mySQL.php" красным цветом и без POST-райдера.