Сессии и с чем их едят
На сегодняшнем уроке мы рассмотрим такой важный механизм PHP, как сессии.Так зачем же нужны эти самые сессии и с чем их "едят"? Рано или поздно практически перед каждым вебмастером встает проблема передачи данных сквозь несколько страниц. Как же сделать так, чтобы пользователь, бродя по сайту, не "терял" однажды введенных данных?
Один из таких способов - использование скрытых элементов форм "hidden". На каждой странице сайта мы размещаем эти элементы, внося в них с помощью PHP значения и передавая эти значения далее, другой странице. Конечно, такой способ вполне возможен, но он нерационален. Представляете, сколько таких элементов надо вставить на сайте объемом, например, 50 страниц.
Но в PHP реализован очень удобный и функциональный механизм работы с сессиями. Он позволяет сохранять любые данные, связанные с пользователем, и использовать их на протяжении всего времени нахождения пользователя на данном сайте.
Реализация механизма сессий в PHP.
Любая сессия открывается с помощью функции session_start(), создающей специальный служебный файл с именем, соответствующим ID сессии, в который впоследствии будут записаны все данные, связанные с текущей сессией. Место размещения этих файлов зависит от настроек PHP. Так что если вы используете в своих скриптах сессии, не забывайте иногда подчищать директорию с этими временными файлами, так как там со временем может накопиться солидное количество ненужных файлов.
Также эта функция используется для продолжения текущей сессии. Таким образом, она должна быть вызвана на каждой странице, использующей данные текущей сессии.
В PHP предусмотрено два способа передачи ID сессии (сокращенно SID):
Через метод GET.
Тогда посетитель будет видеть в своем броузере адресную строку следующего типа:
http://server.com/main.php?PHPSESSID=bdd95bcd4e1e2ef5ec57fc83a69bba86
Через Cookie.
Здесь, соответственно, посетитель не будет видеть признаков существования сессии, SID передается через Cookie.
Следующий шаг в работе с сессиями - запись данных в сессию. Этим занимается функция session_register(). Она сохраняет в файл текущей сессии значения указанных переменных, которыми вы в любой момент можете воспользоваться.
Регистрация данных в сессию должна выглядеть примерно следующим образом:
session_start();
session_register('name', 'birth');
$name = "Вася Пупкин";
$birth = "4 марта";
Теперь на любой странице данного сайта мы можем обратиться к посетителю по имени.
Обратной функции session_register() является функция session_unregister(), которая удаляет данные из текущей сессии. Эта функция используется довольно редко, но иногда бывает очень полезной. Например, в том случае, если вы регистрируете в сессию большое количество переменных, чтобы не перезагружать файл текущей сессии, можно удалить оттуда уже ненужные значения.
Дополнительные функции работы с сессиями
session_id
Нередко при работе с сессиями нам требуется определить ее ID. Этим занимается функция с соответствующим названием session_id(), которая в качестве результата возвращает ID текущей сессии. На этой функции основан механизм подсчета посетителей на сайте в данный момент (см. статью "Сейчас на сайте"), где мы с помощью данной функции сверяем ID текущей сессии с сессиями, записанными в файле.
session_name
Бывают случаи, когда становится очень неудобным использовать ID сессии, например, из-за его громозкости и ненаглядности, так как id сессии вида 7542b069d57510a99eaeb31391b15cbf нам практически ничего не скажет. В этом случае более разумным становится использование функции session_name, которая может выполнять две роли. Во-первых, она может возвращать имя текущей сессии (по умолчанию - PHPSESSID). В этом случае ее следует использовать без аргументов. Во-вторых, эта функция может устанавливать имя текущей сессии. Рассмотрим пример:
session_start();
echo session_name();
session_name("MySession");
echo session_name();
Данный пример выведет:
PHPSESSID
MySession
Безусловно, такие названия сессии воспринимаются намного лучше, чем страшные ID.
session_destroy
Завершает работу сессии функция session_destroy(). Она уничтожает файл, связанный с текущей сессией, что является очень удобным. Но здесь возникает проблема: часто мы не знаем, где именно необходимо уничтожить сессиию. Например, если данные сессии используется страницами всего сайта, то мы не можем уничтожить сессию на определенной странице, так как не знаем, какая именно страница будет последней просмотренной страницей посетителем на сайте. Поэтому использование данной функци возможно лишь в том случае, если мы заранее знаем, на какой именно странице действие сессии должно прекратиться.
Источник: www.rupixel.com