Информационные технологииStfw.Ru 🔍

Сессии

Управляющие функции
🕛 01.11.2006, 13:39
Сессии позволяют реализовать единый механизм передачи данных между страницами сайта. Программная реализация имеется в библиотеке PHPLIB, но в РНР есть встроенная. Сессии работают по следующей схеме.

Пользователю, впервые посетившему сайт, присваивается уникальный идентификатор (идентификатор сессии). Этот идентификатор может быть сохранен в cookie (но не все браузеры их поддерживают) или в строке URL (тогда необходимо вносить значение идентификатора во все внутренние ссылки сайта, имеющиеся на каждой странице сайта).
Затем инициализируется массии, в котором будут храниться данные текущей сессии. Обычно данные сессии хранятся на сервере в файлах или базе данных.
В сценарии используются две основные функции: открытие сессии и внесение значения неременной в данные сессии.
При открытии сессии автоматически извлекаются ранее сохраненные переменные сессии.
При уничтожении сессии (обычно это делается автоматически, но прошествии времени устаревания) удаляются все се данные.
Внутренняя реализация сессий PIIP работает следующим образом. Если параметр конфигурации session.auto_start установлен (равен 1), то при запуске сценария сессия инициализируется автоматически (неявно вызывается функция session_start()). При этом проверяется существование идентификатора сессии и необходимость его создания.

Явно добавить переменную к данным сессии позволяет функция session_register().

Сохранение и восстановление переменных сессии определяется параметрами конфигурации track_vars (обычно он разрешен всегда) и register_globals.

Если параметр register_g"lobals разрешен, то переменные сессии автоматически преобразуются в глобальные и обратно (также их значения доступны в массиве $HTTP_SESSION_VARS).

<?php session_register
("count"): $count++: >>

Если параметр register_globals запрещен, то тогда переменные сессии сохраняются только в глобальном ассоциативном массиве $НТТР_ SESSIONJARS.

<?php session_register
("count");
$HTTP_SESSION_VARS
["count"l++: ?>

PHP может автоматически вносить идентификаторы сессий (SID) в строки локальных гиперссылок, если при компиляции был разрешен параметр -enable-trans-sid. Это бывает полезно, если браузер клиента не поддерживает cookie; иначе придется добавлять идентификаторы сессий в ссылки вручную.

<php? # <?=SID^>
- позволяет вывести идентификатор
сессии
# при интерпретации
заменяется на значение вида
# PHPSESSID=
-da07977e2f4cl52f973676c41d6bd9aa ?>

По умолчганию данные сессий сохраняются в файчах (в каталоге, указанном параметром конфигурации session.save path). Так заметно снижает быстродействие, можно использовать собственную функцию сохранения данных сессий (например, в БД) установив в качестве таковой с помощью функции session set save hand().

session_start

Инициализация данных сессии

bool session_start(void)

Создает массив данных сессии или сессии, переданный через cookie или в строке запроса, дарующая сессия уже существует) восстанавливает ранее сохраненные переменные сессии.

Функция всегда возвращает TRUE.

session_destroy

Уничтожение данных сессии

bool session_destroy(void);

session_ name

Определение имени сессии

string sessionjiame ([string name])

Возвращает имя текущей сессии, и если указан аргумент, то есть ее имя на указанное name.

Имя сессии является именем cookies, или например в строке запросом URL. Оно должно содержать цифровые символы. По умолчанию имя устанавливается параметром session.name , файле конфигурации. Если требуется измнить его в сценарии, это должно быть сделано до открытия сессии (вызова функций session_start() или session_register()).

<?php
Sprevious name = session_name
("WebsitelD"): echo "Ранее именем
сессии было $previous_name<p>"; ?>

session_module_name

Определение модуля работы с сессиями

string session_module_name ([string module])

Возвращает имя текущего модуля для работы с сессиями (обычно это встроенный в РНР модуль). Можно указать имя собственного модуля module, который должен использоваться вместо встроенного.

session_save_path

Определение каталога сохранения данных сессии string session_save_path ([string path])

По умолчанию РНР сохраняет данные сессий в файлах, в каталоге определенном конфигурацией. Функцией возвращается имя этого каталога, и если указан аргумент, то заданный ранее каталог изменяется на указанный.

session_ id

Определение значения идентификатора сессии string session_id ([string id])

Возвращает значение идентификатора текущей сессии; если указан аргумент, то заменяет его на указанное id (установить значение можно только до начала сессии).

Значение идентификатора также хранится в константе SID.

session_register

Добавление переменной сессии

bool session_register (mixed name [, mixed ...])

Возможно указание различного числа аргументов, содержащих имена переменных. Также можно указывать массив, содержащий имена переменных. Функция возвращает TRUE, если регистрация прошла успешно.

session_unregister

Удаление переменной сессии

bool session_unregister (string name)

Возвращается TRUE, если исключение переменной с именем name из данных сессии прошло успешно.

session_unset

Удаление всех переменных сессии

void session_unset(void);

Удаляет все данные текущей сессии.

session_ is_ registered

Проверка принадлежности переменной к текущей сессии

bool session_is_registered (string name)

Возвращает TRUE, если переменная с именем name принадлежит сессии.

session_get_cookie_params

Получение параметров cookie сессии

array session_get_cookie_pararas (void);

Возвращается массив, содержащий три элемента:

lifetime - время жизни cookie;
path - путь URL, для которого cookie действителен;
domain - домен, для которого cookie действителен.
session_ set_ cookie_ params

Установка параметров cookie сессии

void session_set_cookie_params (int lifetime [, string path [, string domain]]).

Параметры, которые устанавливаются этой функцией, будут действовать только на время исполнения сценария, в остальных случаях будут использоваться значения из параметров файла конфигурации php.ini.

session_decode

Декодирование данных сессии из строки

boo! session_decode (string data)

Эта функция используется для извлечения данных сессии, если строка сериалпзированных переменных была сохранена вручную.

session_encode

Кодирование данных сессии в строку

string session_encode(void)

Возвращает строку, содержащую сериализированные данные текущей сессии.

tession_set_save_handler

Установление пользовательских процедур работы с сессиями

void session_set_save_handler (string open, string close, string Aead, string write, string destroy, string gc)

Этой функцией можно установить функции, которые будут выполнять следующие действия: открытие сессии, закрытие, чтение и запись данных сессии, уничтожение устаревших данных, вычисление момента, когда следует удалять устаревшие данные. Имена соответствующих функций указываются в этом порядке, как аргументы данной функции. Для того чтобы можно было использовать пользовательские функции, следует установить для параметра session.save_ handler в файле конфигурации значение user.

Можно реализовать механизм сохранения данных сессий в базе данных. Следующий пример, демонстрирующий сохранение данных в файлах (примерно таким образом действует РНР), может быть лег- / ко преобразован для хранения данных в БД.

<?Php
// инициализация сессии
function open ($save_path. $sesston_name)
{ global $sess_save_path. $sess_session_name:
// здесь может выполняться подключение
к БД $sess_save_path = $save_path;
$sess_session_name -= $session_name: return(TRUE).
}
// закрытие сессии function close()
{ return(TRUE): }
// загрузка данных сессии function
read ($id) { global $sess_save_path.
$sess_session_name
$sess_file =
"$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file. "r";)
{ $sess_data = fread
($fp. filesize($sess_file));
return($sess_data): } else {
returnC"'). }
// сохранение данных сессии
function write ($id. $sess_data) {
global $sess_save_path.
$sess_session_name:
$sess_file = "$sess_save_path/sess_$id":
if ($fp = @fopen($sess_file. "w"))
{ return (fwnte($fp, $sess_data));
} else { return(FALSE): }
} // уничтожение устаревших данных
сессии function destroy (Sid) {
global $sess_save_path.
$sess_session_name:
$sess_file = "$sess_save_path/sess_$id";
' return(@unlink($sess_file)); }
// здесь должны проверяться данные
сессии на истечение времени хранения
function gc (Smaxlifetime) {
return TRUE. }
session_set_save_handler
("open", "close", "read", "write",
"destroy", "gc"); session_start():
// далее следует обычная процедура
работы с сессиями ?>

session_cache_limiter

Определение ограничения кэширования

string session_cachejimiter ([string cachejimiter])

Когда посылаются заголовки HTTP, в них можно указать, разрешено ли кэширование полученных данных. В HTTP допустимы следующие значения: nocache (по умолчанию), private (относительное ограничение кэширования) и public (отсутствие ограничений). При запуске сценария ограничение кэширования устанавливается согласно значению параметра конфигурации session.cache_limiter.

Функция возвращает текущее ограничение кэширования, и если указан аргумент cachejli miter, то устанавливает новое (это необходимо делать до запуска сессии).

<?php
session_cache_himter( 'private');
session_start (): ?>

Учебник по основам PHP   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉