2010-05-25 3 views
0

На моей регистрации сценария у меня есть:PHP значения сессии потеряла после перенаправления на одном сценарии, но сохранившееся после перенаправления на другой

// 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, но почему-то ничего не работало.

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

ответ

1

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

+0

Нет его перенаправлении в том же домене.Невозможно понять, что не так :( – Iuhiz

-3

Зачем использовать exit()? header ("location:/something"); будет препятствовать выполнению оставшейся части скрипта.

+4

Только если заголовок успешный. Если он не работает (например, запуск уже запущен), скрипт выдаст предупреждение и продолжит. Выход - хорошая защитная сетка. –

+0

Хммм, t знать, что. Спасибо! –

+1

заголовок НЕ прекращает выполнение скрипта ни при каких обстоятельствах –

1

На странице руководства о session_write_close есть комментарии от многих людей с такими или подобными проблемами. Некоторые говорят, что это фиксируется с помощью вызова session_write_close перед линией «заголовок (" местоположение»

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

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

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

+0

Просто попробовал добавить session_generate_id(), но черт возьми, все еще не работает. – Iuhiz

+1

вы попробовали session_write_close()? – JasonWoof

0

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

0

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

exit(); 

session_write_close(); 

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

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

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

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

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

Смежные вопросы