2016-07-26 3 views
0

Я использую PHP SDK для PHP, чтобы проверить, что пользователи оставляют комментарии, и это работает очень хорошо. После проверки, я сохраняю информацию пользователя в переменной сеанса, но сначала вызываю session_regenerate_id(), а затем перезагружаю страницу. Когда страница перезагружается, старые данные сеанса по-прежнему доступны, включая переменную состояния SDK для Facebook, однако добавленная переменная сеанса недоступна. Ниже приведен фрагмент кода:Проблемы с session_regenerate_id()

session_regenerate_id(); 
$_SESSION[...] = ...; 

header('Location: ...'); 
die(); 

Если я достаньте session_regenerate_id() то все работает отлично. Любые идеи, что я делаю неправильно?

EDIT

Если я вхожу session_id() каждую загрузку страницы, я вижу, что session_regenerate_id() генерирует новый идентификатор и сеанс содержит все, что я ожидал. Однако, когда перезагрузка страницы происходит, идентификатор сеанса - это предыдущий идентификатор сеанса, а не новый, поэтому я не могу получить доступ к новым переменным сеанса. Почему это произойдет?

+0

'"; print_r ($ _ SESSION); ?> ' –

+0

Почему вы делаете' session_regenerate_id(); 'если у вас есть сеанс, используйте его – RiggsFolly

+0

@ Я не делал этого, и все выглядит хорошо. Однако при повторном тестировании я заметил, что идентификатор сеанса, указанный после 'session_regenerate_id()', не совпадает, когда я перезагружаю страницу, которая по-прежнему является старой сессией. Итак, я думаю, вопрос возникает, почему не меняется идентификатор сеанса? – steveo225

ответ

0

После большого количества регистрации и сканирования отправляемых и полученных заголовков я определил, что при создании начального сеанса домен, используемый для файла cookie, был: .domain.com (без www). Однако session_regenerate_id() установил домен для файла cookie: www.domain.com. Когда браузер определил, для чего отправить, он всегда отправил исходный, поэтому используемый сеанс всегда был старым. Как только я вручную удалил этот файл cookie, все сработало нормально.

Для обеспечения такого рода вещи не повторится, я добавил следующее перед началом моей сессии:

session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], true, true); 

Что странно, файл .htaccess претворяет www.domain.com для консистенции, так Я не уверен, почему домен первоначального файла cookie был настроен так, как он был.

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