Для передачи идентификатора сессии со стороны клиента используется два способа:
· Передача идентификатора сессии непосредственно в строке адреса (например, так: http://127.0.0.1/ex7.php?PHPSESSID=af65756756fghgfuyiu890tyi0iu7780);
· Передача идентификатора сессии с использованием механизма cookies.
Механизм cookies поддерживается браузером для хранения клиентских переменных в файлах на стороне клиента. Механизм cookies является расширением протокола HTTP и более привлекателен с точки зрения обеспечения безопасности, чем прямая передача имени сессии в строке адреса. Минус данного механизма – cookies по умолчанию отключены в большинстве браузеров, что может потребовать от пользователя дополнительных действий по настройке браузера.
Для использования механизма сессий применяются следующие функции:
Наименование функции
Назначение функции и возвращаемое значение
Параметры
session_start
Начать новую сессию или восстановить уже существующую. Уже существующая сессия восстанавливается, если соответствующий параметр передан от клиента, не истек тайм-аут и т.п. – PHP сам определяет, когда нужно создать новую сессию, а когда восстановить уже существующую.
Функция возвращает пустое значение.
Вызова session_start можно избежать, если в php.ini параметр:
session.auto_start=1
Нет.
session_id
Получить идентификатор сессии. Функция возвращает идентификатор сессии
Нет.
session_register
Зарегистрировать имя сессионной переменной.
Переменное число параметров. Каждый параметр задает имя переменной, которую мы хотим зарегистрировать.
session_unregister
Удалить сессионную переменную.
Имя удаляемой переменной.
isset
Проверить, не равно ли значение переменной NULL. Возвращает true, если значение не равно NULL, в противном случае false.
Нам эта функция нужна для проверки существования сессионной переменной.
Переменная.
Зарегистрированные session_register переменные доступны через массив $_SESSION. Для доступа к переменной в качестве ключа в массиве $_SESSION нужно указать имя переменной. Присваивание значений переменным также выполняется через массив $_SESSION. В современных версиях PHP не рекомендуется использование функции session_register – новая сессионная переменная появляется при присваивании элементу массива $_SESSION значения (если переменной с таким именем ранее не было создано, то будет добавлен новый элемент массива). Удаление переменной выполняется также, как и обычно для элемента массива, т.е. путем вызова функции unset.
Для управления сессиями в php.ini могут быть установлены следующие дополнительные параметры:
Наименование параметра
Назначение
session.use_cookies
Если равен 1, то включена работа с cookies. По умолчанию параметр равен 1.
session.cookie_lifetime
Задает время жизни переменных, переданных через cookies в секундах, фактически, при использовании механизма cookies, задает максимальное время существования сессии. По умолчанию этот параметр равен 0, т.е. переменные будут недействительны только после завершения работы клиентского ПО.
session.name
Имя переменной, в которой хранится идентификатор сессии. По умолчанию параметр равен PHPSESSID.
session.cache_expire
Переменные сессии устаревают через указанное в параметре число минут. По умолчанию параметр равен 180.
Пример работы с сессиями
Пример:
<?php session_start(); if( !isset( $_SESSION[ "NEW_SESS_FLAG" ] ) ) { /* считаем, что новая сессия, поскольку переменная NEW_SESS_FLAG не была инициализирована, а по ней мы хотим проверять новая сессия или нет при первом входе, хотим например, ввести имя пользователя и пароль формируем страницу с формой ввода имени пользователя и пароля */ include "login.html";
session_register( "NEW_SESS_FLAG" );
// регистрируем переменную // далее будем ждать имя пользователя и пароль _SESSION["NEW_SESS_FLAG"] = 1; } else { if(_SESSION[ "NEW_SESS_FLAG"] == 1 ) { // вводили имя и пароль проверяем пароль и имя пользователя include "autorize.php";
if( !$good_login ) { // не те имя и пароль, либо нет параметров с именем и паролем // говорим, что пароль не правильный include "bad_passw.html";
// удаляем переменную, следующий запрос будет // восприниматься нами как новая сессия session_unregister( "NEW_SESS_FLAG" ); } else { _SESSION[ "NEW_SESS_FLAG" ] = 2; } }