52568.fb2 Курс "Язык программирования PHP" - читать онлайн бесплатно полную версию книги . Страница 78

Курс "Язык программирования PHP" - читать онлайн бесплатно полную версию книги . Страница 78

// создаем новую сессию или

// восстанавливаем текущую

print_r($_SESSION);

// выводим все переменные сессии

?>

<html>

<head><title>Secret info</title></head>

<body>

<p>Здесь я хочу делиться секретами

с другом Петей.

</body>

</html>

То мы получим в браузере на секретной странице следующее:

Array ( [login] => pit [passwd] => 123 )

Здесь я хочу делиться секретами

с другом Петей.

В итоге получим список переменных, зарегистрированных на authorize.php и, собственно, саму секретную страничку.

Что это нам дает? Допустим, хакер хочет прочитать секреты Васи и Пети. И он как-то узнал, как называется секретная страничка (или странички). Тогда он может попытаться просто ввести ее адрес в строке браузера, минуя страницу авторизации (ввода пароля). Чтобы избежать такого проникновения в наши тайны, нужно дописать всего пару строк в код секретных страничек:

<?php

session_start();

// создаем новую сессию или

// восстанавливаем текущую

print_r($_SESSION);

// выводим все переменные сессии

if (!($_SESSION['login']=="pit" &&

$_SESSION['passwd']==123))

// проверяем правильность

// пароля-логина

Header("Location: authorize.php");

// если ошибка, то перенаправляем на

// страницу авторизации

?>

<html>

<head><title>Secret info</title></head>

... // здесь располагается

//секретная информация :)

</html>

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

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

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

... // здесь располагается

// секретная информация :)