Переменные сессии не уничтожаются даже при использовании session_destroy () - PullRequest
0 голосов
/ 02 апреля 2012
session_start();
$_SESSION['user'] = "789456";
$_SESSION['name'] = "dummy";
$_SESSION['id'] = "123";
print_r($_SESSION);
session_destroy();
echo "Session End";
print_r($_SESSION);

Мой вывод:

Array ( [user] => 789456 [name] => dummy [id] => 123)
Session End :Array ( [user] => 789456 [name] => dummy [id] => 123) 

Должен ли вывод быть просто:

Array ( [user] => 789456 [name] => dummy [id] => 123)

Если я использую session_unset() до session_destroy(), то получаю ожидаемый результат. Всегда ли необходимо использовать session_unset() перед session_destroy()?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Из документации :

session_destroy () уничтожает все данные, связанные с текущим сеансом. Он не сбрасывает ни одну из глобальных переменных, связанных с сеансом, и не сбрасывает cookie сеанса. Чтобы снова использовать переменные сеанса, необходимо вызвать session_start ().

Чтобыполностью завершить сеанс, например, чтобы выйти из системы, идентификатор сеанса также должен быть не установлен.Если файл cookie используется для распространения идентификатора сеанса (поведение по умолчанию), файл cookie сеанса необходимо удалить.Для этого можно использовать setcookie ().

Самый простой способ: $_SESSION = array(); после вызова session_destroy();.

1 голос
/ 02 апреля 2012

http://php.net/session_destroy

session_destroy () уничтожает все данные, связанные с текущим сеансом.Он не сбрасывает глобальные переменные, связанные с сеансом, и не сбрасывает cookie сеанса.Чтобы снова использовать переменные сеанса, необходимо вызвать метод session_start ().

Чтобы полностью завершить сеанс, например, выйти из системы, идентификатор сеанса также должен быть не установлен.Если файл cookie используется для распространения идентификатора сеанса (поведение по умолчанию), файл cookie сеанса необходимо удалить.Для этого можно использовать setcookie ().

session_destroy стирает данные из основного хранилища, но оставляет $ _SESSION в покое.Когда вы обновите страницу, она будет пустой.

Однако вы можете просто сделать $ _SESSION = array ();session_destroy ();(Хотя на самом деле это почти избыточно, так как session_destroy стирает базовые данные, но сохраняет один и тот же идентификатор сеанса - два оператора в основном одно и то же)

...