Php сессия перезагружается по SSL - PullRequest
2 голосов
/ 29 января 2011

Это вариант распространенной проблемы php, которая кажется не поддающейся решению (и здравому смыслу): когда пользователь переключается между http и https на моем сайте, php выдает содержимое сеанса. Это было бы достаточно плохо, за исключением того факта, что сайт работает нормально, когда я запускаю его под доменом test.mysite.com. Проблема обнаруживается только когда я запускаю его на www.mydomain.com, и только на нашем новом сервере. Код отлично работал на моей старой машине!

Оба сервера работают под управлением CentOS, причем проблемный на Rackspace CloudServer.

Есть предложения?

Редактировать

Просто чтобы сделать что-то более понятным: сеанс на самом деле очищается при переходе на защищенную страницу. Я не могу вернуться на незащищенную страницу для просмотра исходного содержимого сеанса, даже если идентификатор сеанса не изменился.

Ответы [ 2 ]

1 голос
/ 29 января 2011

Похоже, вы стали жертвой проклятия страшного файла php.ini. Некоторые параметры cookie устанавливаются по-разному.

Я бы позаботился о том, чтобы файлы php.ini в процессе разработки и производства были ТОЛЬКО одинаковыми, вы используете одну и ту же версию PHP, в идеале - ту же сборку.


РЕДАКТИРОВАТЬ: хорошо, так что это не обязательно разница в php.ini.

Посмотрите на домен, который вы используете для своих файлов cookie. Если вы установили файл cookie без явной настройки домена, то это только текущий домен.

Если это www.example.com, пользователи, которые посещают http://example.com/, перенаправляются на https://www.example.com/ ПОТЕРЯТ ИХ ПЕЧЕНЬЕ.

Почему? Потому что cookie устанавливается для конкретного домена и не будет отправляться браузером на другое имя хоста.

То же самое верно, если вы запускаете сайт под несколькими именами. Убедитесь, что вы запускаете сайт только под точно одним именем . Если пользователь приходит с любым другим именем, перенаправьте его с постоянным перенаправлением на Одно истинное имя, прежде чем устанавливать какие-либо файлы cookie.

0 голосов
/ 29 января 2011

С помощью этой функции вы можете попробовать установить флаг secure в значение false?

<?php
    session_set_cookie_params(0,"/",".mysite.com",false,true);
?>

Подробнее здесь: http://us2.php.net/manual/en/function.session-get-cookie-params.php

...