Вход в сессию PHP после перехода на SSL - PullRequest
1 голос
/ 28 августа 2010

Я решил потратить несколько часов на то, чтобы защитить свой сайт с помощью SSL. Сервер работает нормально, но врезался в стену с помощью моего PHP $ _SESSION. Я понимаю проблему передачи идентификаторов сеансов между HTTP и HTTPS, но здесь этого не происходит (я думаю). Свернутая последовательность сеансов выглядит примерно так:

login.html:

<form action="https://www.mydomain.com/login.php">

login.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 «отправил бы» любые подключения, и это тоже не сработало.

РЕДАКТИРОВАТЬ: я наблюдаю еще одну деталь. Я ожидаю, что на панели Net в Firebug мои AJAX-запросы будут отображаться как "POST https://www.mydomain.com/lib/mySQL/mySQL.php", и я смогу выбрать POST Rider и посмотреть, что произошло. Я не получаю это за неудавшийся запрос. Как ни странно, дисплей Firebug "ОПЦИИ https://www.mydomain.com/lib/mySQL/mySQL.php" красного цвета и без POST райдера.

Ответы [ 2 ]

0 голосов
/ 29 августа 2010

Хорошо, Лекенстейн направил меня в правильном направлении, хотя его ссылки более фаталистичны - с точки зрения программиста на стороне клиента - чем нужно: в мире AJAX ответом на эту конкретную головоломку является аббревиатура JSONP. И если вы окажетесь в том же рассоле, вот тривиальное решение jQuery:

На ваш звонок в $ .ajax: -

(1)  Set "dataType" to "jsonp"
(2)  Set "type" to "GET".  (The rest of my app is defaulted to POST.  The jQuery code  suggests that POST is supported.  But when I try POST, I get another "Permission denied" from Firefox' OPTIONS header.)
(3)  Where my PHP script would formerly reply

        echo json_encode($data);

     it must now go

        echo $_REQUEST['callback'].'('.json_encode($data).')'

     which effectively formats a function call with $data being the one and only parameter to the function.
(4)  Set "url" to "https://www.mydomain.com/lib/mySQL/mySQL.php"

Работает угощение. Формат GET немного уродлив, но хей-хо. Я оставил свой файл cookie PHPSESSID на «secure = true», поэтому он должен передаваться только при зашифрованных рукопожатиях.

PS: Аполлы за ужасное форматирование. Однажды я обязательно выясню, как лучше форматировать свои сообщения на этом форуме.

0 голосов
/ 28 августа 2010

Этот заголовок OPTIONS отправляется в качестве проверки, если Межсайтовые HTTP-запросы разрешены.

https и http являются отдельными сайтами и подчиняются Одинаковой политике происхождения .Ссылка выше объясняет все.

И еще одна статья о межсайтовом XMLHTTPRequest ( Google cache )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...