При разработке WEB приложений на PHP очень часто возникает задача отслеживания пользователя при работе с несколькими html страницами.

Например, приложение открывает какое-либо содержимое только для пользователей, имеющих соответствующие права.

Протокол HTTP не имеет встроенной возможноти сохранять данные при переходе между страницами.

Эта задача может быть решена с использованием механизма сеансов PHP.





Для работы с сеансами в PHP существует глобальный массив $_SESSION. При создании сеанса PHP генерирует уникальный индентификатор сеанса и сохраняет

его на компьютере пользователя как cookie или передается с помощью URL. По умолчанию используется cookie. Идентификатор сохраняется на протяжении всего сеанса.

При создании нового сеанса создается новый идентификатор.

Cookie — это информация, которая сохраняется на компьютере пользователя. Для передачи cookie на клиентский компьютер, необходимо отправить HTTP-заголовок вида




Set-Cookie: NAME=VALUE; [expires=DATE;] [path=PATH;] [domain=DOMAIN;] [secure]




Данная команда создает cookie с именем NAME и значением VALUE. Необязательный параметр expires задает дату истечения срока действия cookie.

Необязательные параметры path и domain определяют URL, к которым относится cookie.

Необязательные параметр [secure] определяет как будет отправляться cookie — через обычное или безопасное соединение.

В PHP cookie можно установить вручную, используя функцию setcookie(). При работе с сеансами cookie создаются автоматически.

При работе с сеансами в PHP необходимо выполнить следующую последовательность действий:

1. Запустить сеанс.

2. Выполнить регистрацию переменных сеанса.

3. Выполнить необходимые действия с переменными сеанса.

4. Выполнить разрегистрацию переменных сеанса.

5. Закрыть сеанс.

Запуск сеанса осуществляется с помощью функции




session_start();




Эта функция создает новый сеанс и осуществляет возможность доступа к массиву $_SESSION.

Если сеанс уже запущен, то эта функция реализует доступ к текущему сеансу.Для создания переменной сеанса необходимо создать элемент в массиве $_SESSION. Например, следующий код создает переменную сеанса username со значением USER

 




$_SESSION['username']="USER";




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

После этого доступ к переменной можно реализовать с помощью массива $_SESSION.

Для разрегистрации переменной сеанса необходимо выполнить команду




unset($_SESSION['varname']);




Для разрегистрации сразу всех переменных сеанса можно использовать команду




$_SESSION=array();




Закрытие сеанса выполняется с помощью команды




session_destroy();




Рассмотрим пример приложения, использующего механизм сеансов в PHP.

Наше приложение будет содержать несколько страниц.

На первой странице пользователь вводит свой логин. (Здесь происходит регистрация переменной сеанса для хранения логина).

На второй странице выводится приветствие с указанием введенного логина и содержится ссылка для перехода на третью страницу.

На третьей странице выводится логин, под которым пользователь вошел в систему и ссылка с меткой Выход для перехода на четвертую страницу.

(На второй и третьей страницах осуществляется доступ к зарегистрированной переменной сеанса для хранения логина).

Четвертая страница содержит ссылку для перехода на третью страницу. (Здесь просиходит разрегистрация переменной сеанса и уничтожение сессии.

Поэтому, при переходе с четвертой на третью страницу, на третьей странице не будет выводится введенный логин).

Создадим соотвествующие страницы.Файл page1.php




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP SESSION example 1</title>
</head>
<body>

<form name="form1" method="post" action="page2.php">
<p><input type="text" name="login" value="Имя пользователя"></p>
<p><input type=submit name="Submit" value="Вход"></p>
</form>

</body>
</html>




Файл page2.php




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP SESSION example 1</title>
</head>
<body>
<?php
session_start();
$_SESSION['login'] = $_POST['login'];;
echo "<p>Добро пожаловать, ".$_SESSION['login']."!</p>";
echo "<p><a href='page3.php'>Следующая страница</a></p>";
?>

</body>
>/html>




Файл page3.php




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP SESSION example 1</title>
</head>
<body>

<?php
session_start();
echo "<p>Вы вошли под именем: ".$_SESSION['login']."</p>";
echo "<p><a href='page4.php'>Выход</a></p>";
?>

</body>
</html>




Файл page4.php




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP SESSION example 1</title>
</head>
<body>

<?php
session_start();
unset($_SESSION['login']);
session_destroy();
echo "<a href='page3.php'>На предыдущую страницу</a>";
?>

</body>
</html>




Результат выполнения представлен на следующих рисунках