Страницы:
0 1 2 3 4 |Все сразу|
Параметры и функции для сессий
В данной главе приведено описаний сессий - это ФУНКЦИИ и одноименные
НАСТРОЙКИ в php.ini или .htaccess. Функции от настроек отличаются
тем, что у первых есть скобочки - функция(). Для тех, кто не в курсе.
Вы можете настраивать сессии, задавая разные параметры в php.ini,
httpd.conf или .htaccess файлах. В php.ini все переменные уже написаны
и содержат какие-либо значения (их называют глобальными настройками),
с помощью httpd.conf или .htaccess можно указать для какого-либо
виртуального сервера или отдельного каталога локальные настройки
ПХП. Для этого используют строку php_value Имя Значение. Обратите
внимание, что использовать настройки можно только если ваш ПХП является
модулем Апача. В противном случае (ПХП - не модуль, а отдельная
CGI-программа) такая строка в .htaccess вызовет ошибку, как и любая
неправильная строка. session_start() Запустить поддержку сессий
в скрипте. Данная функция подробно была описана выше.
Функцию можно не использовать, т.к. первая же session_register("НазваниеПеременнной")
запустит сессии.
session_destroy() уничтожит: все данные, хранящиеся в сессии;
файл, отведенный для данных; переменные в программе и идентификатор
посетителя. Функция отменяет действие session_start(). Вызывать
нужно после вызова session_start(). Можно применять, чтобы уничтожать
сессиию пользователя, а потом сразу вызывать в программе второй
раз session_start(), получиться совершенно новый посетитель с новым
идентификатором и чистой сессией. session_name(), session.name,
PHPSESSID: ПХП для хранения идентификатора использует какую-то переменную.
В куку записывают переменную: значение переменной - идентификатор,
название переменной - PHPSESSID. PHPSESSID - это название, которое
используют по-умолчанию. Я рекомендую переименовать ее во что-либо
короткое, например SID. А для этого надо заменить параметр session.name
на значение SID: можно заменить php.ini: session.name = SID; можно
создать .htaccess файл в каталоге со скриптами вашего сайта и поместить
строку php_value session.name SID. После такого переименования получится,
что константа SID содержит строку "SID=номер_сессии" (echo
SID;), а переменная $SID только сам номер (echo $SID;). Для тех,
кто не в курсе, константы в ПХП используют без символа доллара.
Чтобы получить название переменной, которую используют для хранения
идентификатора, что в свою очередь происходит из-за настроек, надо
воспользоваться функцией без параметра $name=session_name().
Чтобы установить такую переменную в произвольное название, воспользуйтесь
функцией с параметром session_name("МоеНазвание"). Разумеется,
если вам почему-то понадобилось изменить имя переменной для кук
с помощью этой функции, то ее надо вызывать перед session_start()
или session_register(), иначе, как не трудно догадаться, будет поздно
что-либо менять. К тому же, вы должны будете использовать эту функцию
во всех своих скриптах, где требуется заменить "PHPSESSID"
на "МоеНазвание".
session_module_name(), session.save_handler: получить или установить
текущий модуль сессии. ПХП может хранить сессии разном виде. По
умолчанию - в файлах. См. так же session_set_save_handler().
session_save_path(), session.save_path: получить или установить
каталог, в котором будут храниться файлы сессии. $path=session_save_path()
- получить. session_save_path("/mydir/temp"); - установить.
Параметр session.save_path можно задавать в php.ini или .htaccess.
session_id() - получить или установить идентификатор посетителя
(128-битное число, представленное в виде строки в 32 байта). В нормальных
условиях вам не нужно устанавливать номер сессии. Но если вы хотите
для всех своих посетителей использовать одну сессиию, то перед session_start()
придумайте любое имя (произвольная строка) - session_id("dima");
или получите настоящий идентификатор другим образом. Вызов функции
без параметров вернет вам текущий номер сессии (в таком случае -
вызвать после session_start()).
session_register() - зарегистрировать одну или несколько переменных.
Передавать надо имена переменных, а не сами переменные: session_register("переменная1",
"переменная2", ...). Сама функция подробна описана выше.
session_unregister() - выполнить обратное действие: удалить из
сессии необходимую переменную. Можно передать только одно имя переменной
за один вызов функции.
session_unset() - очистить все переменные сессии. В отличие от
session_destroy(), сессия и идентификатор остаются.
session_is_registered() - проверить, зарегистрирована какая-либо
переменная в текущей сессии или нет:
if (session_is_registered("МояПеременная")) ...
session_get_cookie_params() и session_set_cookie_params() - получить
информацию о куке, хранящей переемнную с идентификатором сессии.
echo "<pre>SESSION INFO:\n"; print_r(session_get_cookie_params());
Так можно узнать о времени жизни переменной, домене и пути куки.
session_set_cookie_params() - соотвественно, переустановить параметры
(хотя все эти параметры надо задавать в php.ini - см. ниже).
session_decode() и session_encode() - раскодировать закодированную
строку в сессию и получить закодированную строку сессии.
session_set_save_handler() - возможно, вас не усраивают варианты
хранения сессий, предлагающихся в ПХП. Может быть вы хотите хранить
сессии в простых текстовых файлах, чтобы их можно было легко редактировать;
тогда вам нужно создать несколько функций, отвечающих за функционирование
сессий и передать названия этих функций в session_set_save_handler()
(чтобы пропустить какой либо параметр, передавайте пустую строку
- ""). Если вы пишете что-то нестандарное, вам будет полезна
фукнция. Описывать ее не буду, т.к. не использовал, да и в мануале
есть полное описание и пример.
session.auto_start - по умолчанию равно 0, сессии автоматически
не запускаются; если равно 1, то session_start() писать в начале
каждого скрипта не нужно.
session.cookie_lifetime - если равно 0 (по-умолчанию), то кука,
хранящяя сессию, будет уничтожена на компьютере посетителя, как
только он закроет все окошки браузера. Если не ноль, то это задает
число секунд для хранения куки.
session.gc_maxlifetime - количество секунд, через которое ПХП
уничтожит у себя на диске устаревший файл сессии. По умолчанию -
1440. Это произойдет НЕ РАНЕЕ количества секунд, указанного в переменной.
Данное время определяет нижнюю гланицу (НЕ РАНЕЕ), когда файл становится
кандидатом на удаление. Верхняя граница определяется следующей переменной.
Время отсчитывается от последнеого обращения посетителя т.е. это
время доступа к файлу, а не создания. У любого файла есть время
создания, модификации (запись) и доступа (чтение).
session.gc_probability - число от 1 до 100, измеряемое в процентах
(по умолчанию - 1, т.е. 1%), которое задает вероятность запуска
механизма удаления старых файлов сессии. Другими словами, при каждом
обращении посетителей к любой программе вашего сайта, использущей
сессии, с вероятностью 1% произойдет поиск и удаление устаревших
файлов сессии. Таким образом, по-умолчанию, вы на должны опасаться,
что на сервере скопится огромное число мусора, и вам придется писать
программу для его сбора. Только укажите желаемую частоту сбора.
Не рекомендуется устанавливать 100%, т.к. ПХП будет при каждом обращении
пользователя искать старые файла, что создаст лишнюю нагрузку. Разумный
максимум для данной переменной - 5%, хотя лучше оставить как есть
- 1%.
session.use_cookies - использовать ли куки, для хранения идентификатора
сессий или нет. По умолчанию - 1, можно использовать. Если равно
0, то ПХП ничего в куки записывать не будет, а будет пытаться все
время автозаменять URL и формы.
session.cookie_path - если на вашем сайте используется несколько
разных программ (у каждой свои сессии) и вы не хотите, чтобы сессии
случайно пересекались, то установить нужный путь для кук. Если установить
session.cookie_path /programm1, то все ваши программы, расположенные
в каталоге pogramm1 или его подкаталогах, будут иметь одно общее
пространство для кук, что равносильно одной и тожей сессии. Если
посетитель после каталога /programm1 зайдет в /programm2 (для которого
тоже заведены отдельные куки), то он будт идентифицирован новой
программой по-новому. Если у вас на сайте всего одна программа или
много программ, но на разных названиях серверов, то куки/сессии
никак не пересекутся.
session.cookie_domain - из той же области, что и предыдущая переменная.
Для полного понимания ее работы читайте о куках. Такой документации
на русском языке очень много.
Страницы:
0 1 2 3 4 |Все сразу|