2 Сессии в php
Поддержка сессий в PHP заключается в сохранении некоторых данных в промежутке между несколькими последовательными доступами к серверу одного пользователя.
Одной из особенностей протокола HTTP является отсутствие постоянного соединения с пользователем. Более точно, на прикладном уровне соединение вообще не устанавливается, просто передаются данные по запросу (конечно, в процессе передачи данных между клиентом и сервером устанавливается соединение на транспортном уровне средствами протокола TCP, что обеспечивает надежную доставку, но не более).
Для решения этой проблемы используется механизм сессий. Посетителю присваивается уникальный идентификатор сессии – session id (SID). В дальнейшем идентификатор сессии запрашивается при каждом обращении к серверу. Идентификатор сессии у пользователя хранится в Cookies. Если Cookies отключены, сервер добавляет значение SID в каждую ссылку на странице в качестве GET запроса, таким образом, если пользователь переходит по ссылке на странице, на сервер автоматически передается значение SID. Эти действия выполняются автоматически вызовом функции session_start()
Инициализация сессии – session_start
bool session_start (void)
Создает сессию или продолжает работу в текущей сессии, если в скрипт был передан идентификатор сессии посредством запросов GET, POST или Cookies. Всегда возвращает true. Если работа сессии основана на Cookies, session_start() должна быть вызвана до первой передачи данных браузеру.
Сессии может быть присвоено имя, вызовом функции session_name.
Имя сессии – session_name
string session_name ([string name])
Возвращает имя текущей сессии. name – становится именем текущей сессии, если задан этот параметр. Как правило, эта функция вызывается перед вызовом session_start(). Имя сессии должно содержать только символы букв и цифр. В имени должна присутствовать хотя бы одна буква.
Для сохранения данных в промежутках между запросами используется глобальный массив $_SESSION
Пример 5 Счетчик посещения страницы одним пользователем.
<?php
session_name("My_session");
session_start();
if(isset($_SESSION['count'])
$_SESSION['count']++;
else
$_SESSION['count'] = 1;
?>
<html>
<head>
<title>Reload counter</title>
</head>
<body>
Вы просмотрели эту страницу:
<?php
echo $_SESSION['count'];
?>
раз
</body>
</html>
Механизм сессий не предназначен для защиты от несанкционированного доступа, он используется для хранения данных между обращениями пользователя к серверу. Если идентификатором сессии завладеет третье лицо, ему будут доступны все данные сессии. Наиболее простой способ защиты – хранить идентификатор сессии только в Cookies, в этом случае идентификатор сессии не виден в адресной строке браузера. Все же в этом случае легко узнать идентификатор сессии, просмотрев сетевой трафик. Решением проблемы может быть использование SSL-соединений.