#php #session-cookies
#php #сессия-файлы cookie
Вопрос:
У меня есть 2 страницы php в одном домене. Один находится в корне, другой — в папке 3 ниже. В обоих файлах также есть следующий код:
[...]
session_start();
var_dump(array('id' => session_id(), 'name' => session_name(), 'content' => $_SESSION));
die();
[...]
id
то же самое, name
то же самое, content
отличается…
Если я выполню session_regenerate_id()
в любом из них, обе страницы будут иметь новый идентификатор сеанса, но content
все равно будут отличаться. Очистка кэша браузера и удаление всех существующих файлов cookie не помогут.
что я пропустил?
Комментарии:
1. Все виды настроек могут отличаться для каждого каталога. Если вы добавите вывод
ini_get_all('session')
в свой дамп, какие различия вы видите? (Обычные подозреваемые: другой save_handler или save_path).2. Судя только по предоставленному вами коду, этого не может быть, где-то еще должна быть ошибка.
3. Не могли бы вы вставить заголовки файлов cookie (используя консоль разработчика или firebug), пожалуйста.
4. @Wrikken: дело в том, что ‘session.save_path’ отличается. Итак, есть два файла с одинаковым именем, но разным содержимым. Спасибо за помощь!!!
5. Хорошо, я добавлю его к ответу.
Ответ №1:
Все виды настроек сеанса могут отличаться для каждого каталога. Обратите внимание, что они могут быть установлены в конфигурации php, конфигурации хоста, конфигурации для каждого каталога (в apache: .htaccess), но также и в коде.
Чтобы определить, что отличается, проверка выходных ini_get_all('session')
данных в той точке кода, в которой вы используете сеанс, вероятно, показывает разницу в настройках.
С описанными симптомами (идентификатор сеанса одинаков для разных каталогов, но сохраненный контент отличается), наиболее вероятные причины заключаются в том, что либо save_handler
отличается (для хранения сеанса используется другой механизм, например, файлы или memcached), либо save_path
отличается (для хранения сеансов используется другое место). В данном случае это было в save_path
соответствии с комментариями.
Обратите внимание, что если идентификатор сеанса отличается в 2 каталогах, наиболее вероятной причиной является неправильная cookie_path
настройка, если она отличается между поддоменами, посмотрите на cookie_domain
настройку.