Основными этапами использования сеанса являются:
- Запуск сеанса.
- Регистрация переменных сеанса.
- Использование переменных сеанса.
- Разрегистрация (отмена регистрации) переменных и закрытие сеанса.
Заметим, что эти этапы не обязательно должны содержаться в одном сценарии, и некоторые из них могут находиться в нескольких сценариях. Рассмотрим последовательно каждый из перечисленных этапов.
Запуск сеанса
Прежде чем можно будет воспользоваться возможностями, предоставляемыми сеансом, следует запустить сам сеанс. Существует два способа сделать это.
Первый и самый простой заключается в помещении в начало сценария вызова функции session_start():
session_start();
Эта функция проверяет, находитесь ли вы в текущем сеансе. Если нет, она создает идентификатор сеанса, обеспечивая доступ к суперглобальному массиву $_SESSION.
Неплохо помещать вызов session_start() в начало всех сценариев, в которых используется механизм управления сеансами.
Второй способ запустить сеанс — задать установки PHP, при которых сеанс будет запускаться автоматически, как только кто-то посетит ваш сайт. Для этого следует воспользоваться опцией session.auto_start в файле php.ini. Более подробно указанный способ будет описан при рассмотрении вопросов конфигурирования. С этим методом связан один большой недостаток — при включении опции auto_start нельзя использовать объекты в качестве переменной сеанса.
Регистрация переменных сеанса
Способ регистрации переменных сеанса в PHP был изменен. Начиная с версии PHP4.1, переменные сеанса храняться в суперглобальном массиве $_SESSION, а также, по старому, в массиве $HTTP_SESSION_VARS. Ms рекомендуем пользоваться массивом $_SESSION. При создании переменной сеанса вы просто устанавливаете в этом массиве какой-то элемент, например:
$_SESSION [ 'myvar' ] = 5;
Если вы пользуетесь старой версией PHP, то чтобы передать переменные из одного сценария в другой, их необходимо зарегистрировать, вызвав функцию session_register(). Такой подход применять не рекомендуется.
Созданная переменная сеанса актуальна до тех пор, пока ваш сеанс не будет завершен либо пока она не будет разрегистрирована.
Использование переменных сеанса
Чтобы сделать переменную сеанса доступной для использования, сначало необходимо запустить сеанс с помощью session_start(). После этого к переменным можно обратиться через суперглобальный массив $_SESSION, например, так:
$SESSION [ 'myvar' ]
Если в качестве переменной сеанса используется некоторый объект, очень важно поместить перед вызовом session_start() определение соответствующего класса, чтобы можно было перезагрузить переменные сеанса. В результате PHP будет знать, как реконструировать объект сеанса.
Если опция register_globals включена, к переменным можно иметь доступ с использованием коротких имен, заданных в форме, скажем $myvar, однако пользоваться этим подходом не рекомендуется. Помните, что при включенной опции register_globals переменные сеанса не могут быть перезаписаны данными, передаваемыми методами GET или POST. Это хорошо с точки зрения безопасность, однако сопряжено с некоторыми ограничениями при кодировке.
С другой стороны, следует проявлять аккуратность при проверке, установлены ли переменные сеанса, например с помощью функци isset() или empty(). Необходимо иметь в виду, что переменные могут быть установлены пользователем с помощью GET или POST. Проверить зарегистрирована ли переменная как переменная сеанса, можно через массив $_SESSION.
if (isset ($_SESSION [ 'myvar' ] ) ) . . .
Разрегистрация переменных и уничтожение сеанса
После окончания работы с переменной сеанса ее можно разрегистрировать (отменить ее регистрацию). Это делается непосредственно через массив $_SESSIOM, напрмер:
unset ($_SESSION { 'myvar' ] );
Обратите внимание, что вызовы функций session_unregister() и session_unset() более не требуется, да и не рекомендуется. Эти функции использовались до введения массива $_SESSION.
Не следует пытаться разрегистрировать целиком весь массив $_SESSION, поскольку это отключает все сеансы. Для разрегистрации сразу всех переменных сеанса можно воспользоваться следующим оператором:
$_SESSION = array();
По завершении сеанса сначала потребуется разрегистрировать все переменные, а затем вызвать
session_destroy();
для очистки идентификатора сеанса.
Пример простого сеанса
Изложенный выше материал может показаться несколько абстрактным, поэтому мы рассмотрим сейчас пример сеанса, работающего с тремя страницами.
На первой странице запускается сеанс и создается переменная $SESSION [ 'sess_var' ].
page_s1.php —запуск сеанса и создание переменной сеанса
<?php
session_start();
$_SESSION['sess_var'] = " Привет всем на нашем сайте! ";
echo ' Значение переменной $_SESSION [\'sess_var\'] равно <b>'
.$_SESSION['sess_var']. '</b><br>';
?>
<a href="page_s2.php"> На следующую страницу </a>
Этот сценарий создает переменную и устанавливает ее значение.
В окне веб-браузера это будет выглядеть ТАК
Конечное значение переменной на этой странице — это то значение, которое будет доступно на последующих страницах. В конце сценария переменная сеанса сериализуется, т.е. преобразуется в последовательную форму, или замораживается, до перезагрузки при следующем вызове session_start().
Таким образом следующий сценарий начинается с вызова session_start().
page_s2.php —доступ к переменной сеанса и ее регистрация
<?php
session_start();
echo ' Значение переменной $_SESSION [\'sess_var\'] равно <b>'
.$_SESSION['sess_var']. '</b><br>';
unset($_SESSION['sess_var']);
?>
<a href="page_s3.php"> На следующую страницу </a>
После вызова функции session_start() переменная $_SESSION['sess_var'] становится доступной, а ее значением будет то, которое сохранено в предыдущем сеансе.
Прейдите по ссылке со страницы page_s1.php на страницу page_s2.php и посмотрите результат.
Проделав над переменной все необходимые действия, ее нужно разрегистрировать. Сеанс еще существует, но переменная $sess_var уже не будет существовать.
И, наконец, мы переходим к page_s3.php, последнему сценарию в рассматриваемом примере.
page_s3.php — завершение сеанса
<?php
session_start();
echo ' Значение переменной $_SESSION [\'sess_var\'] равно <b>'
.$_SESSION['sess_var']. '</b><br>';
session_destroy();
?>
Нажмем на сслылку на странице page_s2.php мы увидем что значение $_SESSION['sess_var'] более не доступно.
В версиях PHP до 4.3 при попытке разрегистрации элементов массивов $HTTP_SESSION_VARS или $_SESSION может возникуть ошибка. В этом случае при невозможности разрегистрировать элементы (они остаются установленными) нужно воспользоваться функцией session_unregister().
Сценарий завершается вызовом функции session_destroy(), которая уничтожает идентификатор сеанса.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться