При разработке 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>
Результат выполнения представлен на следующих рисунках