разное содержимое для одного и того же сеанса?

#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 настройку.