Переменные сеанса не уничтожаются даже при использовании session_destroy()

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()?


person Pratul Baheti    schedule 02.04.2012    source источник


Ответы (2)


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

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

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

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

person scessor    schedule 02.04.2012

http://php.net/session_destroy

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

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

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

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

person Corbin    schedule 02.04.2012