У меня странные проблемы с переменными сеанса PHP, утверждающими, что они не установлены.Я сталкиваюсь с этим только в одной конкретной ситуации:
На моем сайте есть трехэтапный мастер, и я использую сеансы для сохранения выбора пользователя на каждом шаге.Чтобы запустить мастер, я использую сценарий инициализации, который обеспечивает удаление всех старых данных сеанса мастера - этот сценарий инициализации перенаправляет пользователя на шаг 1. Например:
// Initialize wizard session and send user to step 1
$_SESSION['wizard'] = array();
$_SESSION['wizard']['step1'] = TRUE;
session_write_close();
header('Location: http://mysite.com/wizard/step1.php');
Затем в верхней части шага 1.php, я делаю проверку вроде:
if (!isset($_SESSION['wizard']['step1']))
throw new Exception('Step1 not initialized');
Когда пользователь отправляет форму step1, она отправляется обратно для проверки.Если он проходит, другой шаг выполняется на шаге 2.
В большинстве случаев это работает нормально.На самом деле скрипт init всегда работает и форма step1 всегда загружается без проблем.Но иногда, после отправки формы шага 1, возникает исключение 'Step1 not initialized'.Я не понимаю, как начальная загрузка могла пройти проверку, но форма поста провалилась через несколько секунд.Особенно учитывая, что эта проблема случается нечасто, и в большинстве случаев проблем вообще нет.
Я использую базу данных для хранения своих данных сеанса, и я не думаю, что это связано свремя ожидания сеанса или сборка мусора - некоторые связанные значения php.ini:
session.use_cookies = 1
session.cookie_lifetime = 0
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 86400
Кто-нибудь знает, что может быть причиной такой проблемы?Любое понимание будет высоко ценится.
Спасибо, Брайан