Реферат: Сессии в PHP
Название: Сессии в PHP Раздел: Рефераты по информатике, программированию Тип: реферат |
Сессия - это время, в течении которого посетитель находится на сайте. Часто возникает необходимость в том, что бы в течении сеанса пользователя сопровождали некоторые переменные. Можно записать эти переменные в cookie, но если переменных много, то этот способ не очень удобен. Гораздо эффективнее в такой ситуации является использование сеансовых переменных. Об этом и пойдет речь в этой статье. Механизм работы сессий Наверняка вам интересен механизм работы сессий. Ну что ж, я расскажу. К примеру при входе на сайт пользователю присваивается случайный идентификатор - SID. Он сохраняется на компьютере пользователя в cookie c именем PHPSESSID. Вообще это имя выставляется в файле php.ini, но речь сейчас не об этом. Если же в браузере посетителя отключен прием cookie, то этот идентификатор со значением цепляется ко всем url на протяжении сессии. Во время создания сессии на сервере создается файл, имя которого совпадает с PHPSESSID. В этом файле содержатся все сеансовые переменные. Однако сеансовые переменные так же могут быть сохранены и в базе данных - все зависит от конфигурации PHP. По умолчанию эти переменные сохраняются в файле в той дирректории, в которой лежит скрипт, создавший сеанс. При обращении к сеансовой переменной сервер открывает (или делает запрос к базе данных) сеансовый файл и ищет там значение нужной переменной. Создание сессии Сессия создается с помощью функции session_start(). При вызове она проверяет, существует ли уже созданная сессия. Если нет, то она создает сессию. Синтаксис функции: boolean session_start(); При создании сеанса функция сначала присваивает пользователю SID, отправляет cookie и создает файл с сеансовыми переменными. Очень легко и удобно. Уничтожение сессии Если вам по каким то причинам приспичило уничтожить сессию, то воспользуйтесь функцией session_destroy(). Синтаксис функции: boolean session_destroy(); Эта функция уничтожает сеансовые переменные и сеансовый файл (если эти переменные были в нем). Обратите внимание, что эта функция не уничтожает cookie с SID на комьютере посетителя. Создание сеансовых переменных Ну а теперь о том, ради чего вообще задумывалась технология сессий - о создании сеансовых переменных. Этим занимается функция session_register(). Синтаксис функции: boolean session_register(mixed name [, mixed ...]); Следует заметить, что эта функция лишь создает сеансовые переменные, и ничего более. Присвайвать значения им придется самостоятельно. Делается это как в случае с обычными переменными. К тому же эта функция неявно вызывает session_start().Впрочем из следующего примера будет все ясно. Как узнать, была ли зарегистрирована переменная Это можно узнать с помощью функции session_is_registered(). Синтаксис функции: booleansession_is_registered(string name); Первый пример Теперь вы знаете достаточно, что бы пользоваться сеансовыми переменными. На основе полученных знаний можно реализовать, к примеру, простейший счетчик посещений. Он будет считать сколько страниц просмотрел пользователь за один сеанс. <?php session_start(); //создаем сессию //если переменная page_hits не была зарегистрирована //то регистрируем её и присваиваем начальное значение if (!session_is_registered('page_hits')) { session_register('page_hits'); $page_hits = 0; } $page_hits++; echo "Вы просмотрели уже $page_hits страниц"; ?> Такой код можно разместить на любой странице вашего сайта. Уничтожение сеансовых переменных Сеансовые переменные уничтожаются функцией session_unregister() с таким же успехом, как и создаются. Синтаксис функции: boolean session_unregister(string name); Это может быть полезным в том случае, если вам не нужна больше сеансовая переменная и вы хотите использовать её как обычную переменную. Изменение/Получение SID Получить или изменить текущий сеансовый идентификатор легко. Достаточно воспользоваться функцией session_id(). Синтаксис функции: string session_id([string sid]); Если был передан параметр sid, то сеансовый идентификатор изменяется. В противном случае функция просто возвращает SID. Сохранение и восстановление сеансовых переменных В PHP сохранение и восстановление сеансовых переменных сведено к использованию функций session_encode() и session_decode(). Это очень удобно, поскольку функция session_encode() формирует строку которую можно где ни будь сохранить и в дальнейшем расшифровать функцией session_decode(). Эту строку очень удобно хранить в базе данных, поскольку не нужно создавать отдельные поля да и обьем скрипта уменьшается. Итак, синтаксис этих фукнций: boolean session_encode(); string session_decode(string data); С первой функцией более менее понятно. А второй функции необходимо передать зашифрованную функцией session_encode() строку. Без примера воспринимается не очень легко. Давайте рассмотрим простенький пример. Предположим, что сессия уже начата и в переменной $u_id хранится идентификатор пользователя. <php ... //где то в скрипте $id = session_id($u_id); //подключаемся к базе mysql_pconnect("localhost", "root", "") or die("Не могу подключиться к базе"); mysql_select_db("mysite"); //выбираем базу //здесь выбирается поле с сохраненной строкой сеансовых переменных $query = "SELECT s_data FROM saved_users_data WHERE uid = '$id'"; $result = mysql_query($query) or die("Query '$query' failed"); $user_s_data = mysql_result($result, 0, 's_data'); //теперь наша стркоа хранится в переменной $user_s_data session_decode($user_s_data); //допустим, что среди сохраненных сеансовых переменных //была переменная $my_str echo $my_str; //будет выведена строка, которая была сохранена в предыдущем сеансе ... ?> |