Опубликован: 01.03.2005 | Доступ: свободный | Студентов: 33897 / 4520 | Оценка: 4.31 / 4.06 | Длительность: 16:41:00
ISBN: 978-5-9556-0026-0
Лекция 12:

Авторизация доступа с помощью сессий

< Лекция 11 || Лекция 12: 12345 || Лекция 13 >

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

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

Функция 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

В 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

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

Для того чтобы сбросить значения всех переменных сессии, можно использовать функцию 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. Уничтожение сессии и глобальных переменных

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

< Лекция 11 || Лекция 12: 12345 || Лекция 13 >
Дарья Федотова
Дарья Федотова
Сергей Березовский
Сергей Березовский

В рамках проф. переподготовки по программе "Программирование"

Есть курсы, которые я уже прошел. Но войдя в курс я вижу, что они не зачтены (Язык Ассемблера и архитектура ЭВМ, Программирование на С++ для профессионалов). Это как?

Евгений Устинов
Евгений Устинов
Россия, Рязань, Рязанский радиотехнический университет, 2006
Игорь Хан
Игорь Хан
Узбекистан, Ташкент, Ташкентский педагогический институт иностранных языков, 1990