2013-11-17 7 views
0

У меня есть приложение, которое должно создать новый идентификатор сеанса в определенное время. Прямо сейчас это приводит к тому, что пользователь выходит из системы, потому что $ _SESSION заканчивается пустым.Регенерация_session_id информация об уничтожении

Это мое понимание того, что regenerate_session_id() должны сохранять информацию о сеансе и просто изменить идентификатор сессии (это означает, что $ _SESSION [ «someVar»] будет доступен на последующих запросах.

Что я находка что $ _SESSION пуста при последующих запросах

Я попытался скопировать данные:..

$session = $_SESSION; 
session_regenerate_id(); 
$_SESSION = $session; 

, но это не помогло Если я закомментировать session_regenerate_id(); последующие страницы загружаются надлежащим образом (за $ Массив _SESSION является popul и пользователь остается в системе).

У меня есть среда разработки, которую я только что создал недавно, запуская новую версию PHP (5.5), и этот код функционирует так, как я ожидал. Я не знаю никаких других различий.

Что мне не хватает? Заранее спасибо.

ответ

0
session_start(); 

$_SESSION['name'] = "mike"; 

session_regenerate_id(); 

echo $_SESSION['name']; 

выводит «микрофон»

0

Я сделал небольшой тест на моем сервере, и это, кажется, работает хорошо.

<?php 
session_start(); 
$old = session_id(); 
$_SESSION['name'] = "mike"; 
session_regenerate_id(); 
$new = session_id(); 
echo $_SESSION['name']."<br/>\n"; 
echo $old ."<br/>". $new 
?> 

Вот пример вывода:

mike 
d9oog3vo55936m3088o25qqe27 
m6qq99pp1c80mit8e66ho3hfn3 

Как вы можете видеть, это изменяет идентификатор сессии и хранение переменных сеанса на месте, как это предполагается. Возможно, у вашего хостинг-провайдера есть некоторые фанковые настройки в php.ini? Вы можете посмотреть на это.

В качестве альтернативы, и это немного хлопот, не могли бы вы создать куки-файл с ключом, который будет записывать их обратно сразу после его выхода из системы, а затем удалить cookie?

После хорошего ночного отдыха мне пришло в голову, что у вас, вероятно, есть проблемы с заголовком. Сессии действительны только в том же домене, в котором они установлены, например, если вы установили переменную сеанса в www.example.com, затем используйте перенаправление заголовка на header("location:example.com");, ваши переменные сеанса будут пустыми, поскольку они не установлены для этого домена , они установлены для www.example.com. Я проверил бы ваш код и посмотрел бы, если это проблема, как вы говорите, он отлично работает в вашей песочнице.

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