Удаление переменных сессии
Кроме умения регистрировать переменные сессии (т.е. делать их глобальными на протяжении всего сеанса работы), полезно также уметь удалять такие переменные и сессию в целом.
Функция session_unregister(имя_переменной) удаляет глобальную переменную из текущей сессии (т.е. удаляет ее из списка зарегистрированных переменных). Если регистрация производилась с помощью $_SESSION ($HTTP_SESSION_VARS для версии PHP 4.0.6 и более ранних), то используют языковую конструкцию unset(). Она не возвращает никакого значения, а просто уничтожает указанные переменные.
Где это может пригодиться? Например, для уничтожения данных о посетителе (в частности, логина и пароля) после его ухода с секретной странички. Если правильные логин и пароль сохранятся и окно браузера после посещения сайта не закрыли, то любой другой пользователь этого компьютера сможет прочитать закрытую информацию.
Пример 12.4. Уничтожение переменных сессии
В файл secret_info.php добавим строчку для выхода на главную страницу:
<?php // ... php код ?> <html> <head><title>Secret info</title></head> ... // здесь располагается // секретная информация :) <a href="index.php">На главную</a> </html>
Пример 12.4a. secret_info.php (html, txt)
В Index.php уничтожим логин и пароль, введенные ранее:
<? session_start(); session_unregister('passwd'); // уничтожаем пароль unset($_SESSION['login']); // уничтожаем логин print_r($_SESSION); // выводим глобальные переменные сессии ?> <html> <head><title>My home page</title></head> ... // домашняя страничка </html>
Пример 12.4b. Index.php (html, txt)
Теперь, чтобы попасть на секретную страницу, нужно будет опять вводить логин и пароль.
Для того чтобы сбросить значения всех переменных сессии, можно использовать функцию 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(); ?>
Пример 12.5. Уничтожение сессии и глобальных переменных (html, txt)
В результате работы этого скрипта будут выведены три строки: в первой - массив с элементом test и его значением, а также идентификатор сессии, во второй - пустой массив и идентификатор сессии, в третьей - пустой массив. Таким образом, видно, что после уничтожения сессии уничтожается и ее идентификатор, и мы больше не можем ни регистрировать переменные, ни вообще производить какие-либо действия с сессией.