Удаление переменных сессии

Кроме умения регистрировать переменные сессии (т.е. делать их глобальными на протяжении всего сеанса работы), полезно также уметь удалять такие переменные и сессию в целом.

Функция session_unregister(имя_переменной) удаляет глобальную переменную из текущей сессии (т.е. удаляет ее из списка зарегистрированных переменных).

Если регистрация производилась с помощью $_SESSION ($HTTP_SESSION_VARS для версии PHP 4.0.6 и более ранних), то используют языковую конструкцию unset(). Она не возвращает никакого значения, а просто уничтожает указанные переменные.

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

Пример 1. Уничтожение переменных сессии

В файл secret_info.php добавим строчку для выхода на главную страницу:

<?php 
// ... php код
?>
<html>
<head><title>Secret info</title></head>
... // здесь располагается
// секретная информация :)
<a href="index.php">На главную</a>
</html>

В Index.php уничтожим логин и пароль, введенные ранее:

<? 
session_start();
session_unregister('passwd');
// уничтожаем парольunset($_SESSION['login']);
// уничтожаем логинprint_r($_SESSION);
// выводим глобальные переменные сессии
?>
<html>
<head><title>My home page</title></head>
... // домашняя страничка
</html>

Теперь, чтобы попасть на секретную страницу, нужно будет опять вводить логин и пароль.

Для того чтобы сбросить значения всех переменных сессии, можно использовать функцию session_unset();

Уничтожить текущую сессию целиком можно командой session_destroy();

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

<? 
session_start(); // инициализируем сессию$test = "Переменная сессии";
$_SESSION['test']= $test;
// регистрируем переменную $test.
// если register_globals=on,
// то можно использовать
// session_register('test');

print_r($_SESSION);
// выводим все глобальные переменные
echo session_id();
// выводим идентификатор сессии
echo "<hr>";
session_unset();
// уничтожаем все глобальные
// переменные сессииprint_r($_SESSION);
echo session_id();
echo "<hr>";
session_destroy(); // уничтожаем сессиюprint_r($_SESSION);
echo session_id();
?>

В результате работы этого скрипта будут выведены три строки: в первой - массив с элементом test и его значением, а также идентификатор сессии, во второй - пустой массив и идентификатор сессии, в третьей - пустой массив. Таким образом, видно, что после уничтожения сессии уничтожается и ее идентификатор, и мы больше не можем ни регистрировать переменные, ни вообще производить какие-либо действия с сессией