Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / web / Введение в PHP.doc
Скачиваний:
77
Добавлен:
18.05.2015
Размер:
3 Mб
Скачать

Отмена регистрации сеансовых переменных

Сеансо­вые переменные можно удалить, уничтожив весь сеанс или удалив только некоторые сеансовые переменные. Для удаления переменных можно использовать оператор unset(), удаляющий элемент из суперглобального массива $_SESSION, или функцию session_unregister(name). Эта функция возвращает true, если переменная была удалена успешно, или false, если переменная не существует.

В PHP вводится также функция header("Location: http://www.domain.com"), которая используется для перенаправления браузера на страницу, определенную параметром Lo­cation во время существующих сеансов.

Следующий пример демонстрирует, как инициализируется переменная сеанса.

<?php

session_start();

if ($_SESSION['count'] == "")

{

$_SESSION['count'] = 1;

}

else

{

$_SESSION['count'] = $_SESSION['count'] + 1;

}

?>

В примере сначала вызывается функция session_start() для инициализации данных сеанса. Если значение переменной сеанса "count" будет null то оно инициализиру­ется как 1, иначе увеличивается на 1. В этом случае переменная сеанса count используется для подсчета числа посетителей. Переменные сеанса предоставляют простой способ соз­дания счетчиков страниц, так как каждому пользователю предоставляется уникальный се­анс.

Для доступа к конфиденциальному сайту переменная сеанса может создаваться только после успешного ввода пользователем своего имени и пароля. В этом случае пере­менная сеанса содержит значение, которое передается со страницы на страницу, указывая, что пользователь имеет право доступа к любым ресурсам, связанным с сайтом. Когда пользователь выходит из сессии, переменная сеанса должна возвращаться в исходное со­стояние. Это выполняется с помощью функции session_destroy().

<?php // login.php

if ($_POST['submit'] == "Login")

{

// сценарий проверки имени пользователя и пароля должен //кодироваться здесь если аутентификация прошла успешно

session_start();

$_SESSION['access'] = "yes";

header(Location:access.php);

}

if ($_POST['submit'] == "Log Out")

{

//если пользователь решает выйти

session_destroy();

}

?>

<?php // access.php

// если пользователь обращается к этой странице,

// проверьте, что он был аутентифицирован в login.php

if ($_SESSION['access'] != "yes")

{

header(Location:login.php);

}

?>

Пример состоит из двух страниц — login.php и access.php. Прежде чем пользователь сможет увидеть содержимое access.php, он должен пройти login.php. Создается сеанс, чтобы гарантировать, что пользователь был аутентифицирован. После того как пользова­тель вводит действительное имя пользователя и пароль, выполняется щелчок на кнопке "Login". Сценарий PHP проверяет, будут ли пароль и имя пользователя допустимы. Затем переменной сеанса присваивается значение "yes" и доступ предоставляется. Пользователь перенаправляется на страницу access.php. Сценарий на access.php проверяет, что сущест­вует сеанс. Если сеанс не существует, применяется функция header(), чтобы перенапра­вить пользователя назад на страницу login.php и не разрешить доступ к содержимому страницы access.php.

Страница login.php содержит второй сценарий, который используется для уничтоже­ния переменной сеанса, вызывая функцию session_destroy(). Сценарий выполняется после того, как пользователь щелкает на кнопке "Log Out".

Приложения Web, которые используют данные сеанса, могут быть доступны одно­временно множеству пользователей. Чтобы каждый пользователь имел свой собственный сеанс, с каждым сеансом необходимо связать уникальное значение id. В PHP это уникаль­ное значение сеанса id можно извлечь с помощью функции session_id(). Уникальное зна­чение сеанса session_id() поддерживается для каждого пользователя и хранится в подката­логе PHP/sessiondata, расположенном на сервере Web.

Так как значение session_id() является уникальным для каждого пользователя, его можно применять для идентификации пользователей, не создавая при этом индивидуаль­ных имен пользователей и паролей. Функция session_id() определена ниже:

session_id() – используется для получения значения id текущего сеанса

В РНР сеансы работают с переменными внутри глобальной области. Это означает, что для регистрации переменной в функции, зта переменная должна быть объявлена как глобальная с помощью опервтора global. Более того, РНР реконструирует переменные только внутри глобальной области.