Значения сеанса PHP теряются после перенаправления на одном скрипте, но сохраняются после перенаправления на другом - PullRequest
0 голосов
/ 25 мая 2010

В моем сценарии регистрации у меня есть:

// Save registration information into the database

// Set sessions
$_SESSION['var1'] = 'somevalue';
$_SESSION['var2'] = 'anothervalue';

header('Location: /somewhere');
exit();

Тогда в моем сценарии входа у меня есть:

// Check if user provided correct login credentials
if (correct) {
    $_SESSION['var1'] = 'somevalue';
    $_SESSION['var2'] = 'anothervalue';
}

header('Location: /somewhere');
exit();

Произошло то, что переменные сеанса были потеряны после перенаправления заголовка в сценарии регистрации, но они были сохранены после перенаправления в сценарии входа в систему.

Я проверил session_id() на обеих страницах, и они имеют одинаковое значение, включили session_start() в верхней части каждой страницы и в основном пытались решить эту распространенную проблему, обнаруженную в Stackoverflow, но почему-то ничего не получалось. 1011 *

Я начинаю задумываться, не связано ли это с моей конфигурацией сервера, а не с моим кодом.

Ответы [ 5 ]

1 голос
/ 25 мая 2010

На странице руководства о session_write_close есть комментарии от множества людей с подобными или похожими проблемами. Некоторые говорят, что это исправлено путем вызова session_write_close перед строкой header ('location').

Это сообщение: http://us.php.net/manual/en/function.session-write-close.php#86791

Он говорит, что это не сработало для него, но вызов session_regenerate_id () сработал. (Это изменяет файл cookie сеанса и вынуждает php отправлять файл cookie.

Может потребоваться повторная отправка куки. Я читал людей, которые говорили, что некоторые браузеры не отправляют файлы cookie после перенаправления, кроме файлов cookie, которые они только что получили по исходному URL.

1 голос
/ 25 мая 2010

Вы перенаправляете между www.example.com и example.com? Так как это два разных домена.

0 голосов
/ 03 сентября 2013

У меня была такая же проблема, после этого я все перепробовал:

exit();

session_write_close();

или $_SESSION['user'] = $user; или session_register("user");

все возможные геометрические позиции на странице session_start();

в конце ... Я обнаружил, что в моей конфигурации папка пути сохранения сеанса недоступна для записи.

После установки на запись и установки правильного пользователя все работает как шарм.

Чтобы найти путь для сохранения, посмотрите в phpinfo () что находится под session.save_path

0 голосов
/ 24 апреля 2013

Я понимаю, что это старый поток, но я только что переместил сайт на новый выделенный IP-адрес с сертификатом, и сеансы не будут передавать перенаправление заголовка ("location:") ... где в старом местоположении они были прохождение просто отлично. Единственное, что сработало, это добавление session_regenerate_id (true); до перенаправления. Мне все еще интересно, почему? Есть какие-нибудь идеи?

0 голосов
/ 25 мая 2010

зачем использовать exit ()? заголовок ("местоположение: / где-то"); предотвратит выполнение остальной части скрипта.

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