|
Все вы наверняка хоть раз бывали на форумах, чатах и других подобных сайтах. Вас никогда не удивляло, как он ухитряется всё время помнить все ваши настройки, ваше имя и тому подобное, ведь от страницы к странице вы переходите по простой ссылке, и в адресной строке вроде бы никаких переменных не видно?
Подобные фокусы осуществляются с помощью так называемых «сеансов работы пользователей». Некоторые делают это всё вручную, например на хостингах с поддержкой PHP только третьей версии (наверное, ещё есть такие), но в PHP 4 появились удобные встроенные средства для работы с сессиями. О них мы сегодня и поговорим.
Итак, что же такое PHP-сессии? Если в двух словах, то сессии - это набор особых функций, интегрированных в PHP, которые могут сохранять так называемые «сессионные» переменные (то есть переменные, которые могут быть доступны для всех выполняющихся одним и тем же пользователем скриптов).
Работает это следующим образом. При вызове специальной функции, обозначающей старт сессии (называется она, как не странно session_start()) PHP-интерпретатор выполняет такие действия:
- во первых, он проверяет, не установлена ли переменная $PHPSESSID, если нет, то:
- генерирует случайный идентификатор сессии $PHPSESSID, который представляет из себя 32-символьную строку приблизительно такого вида:
833be10e4834f630afa7a91ec2cf2b48
- потом создает специальный файл, в который будут сохраняться переменные, и присваивает ему имя вида
«sess_» + индикатор сессии.
- понятно, если переменная $PHPSESSID уже установлена, то интерпретатор просто открывает нужный файл и после этого все переменные, определенные ранее в сессии, будут доступны, как и обычные, простым обращением «$имя_переменной»
Следовательно, единственным нашим заданием остается передать этот самый $PHPSESSID во все скрипты, к которым можно перейти по ссылке. Но особой сложности в этом нет, поскольку это также происходит автоматически (вообще-то, не всегда, а лишь при работе PHP с включенным параметром --enable-trans-sid, но сейчас будем считать, что PHP был откомпилирован и настроен правильно). Итак, делается это двумя способами: при помощи cookie (по умолчанию) или присоединением к каждой ссылке GET-параметра и hidden-поля к каждой форме. Прежде всего, PHP пробует установить cookie, и только если ему это не удаётся, «перелопачивает» все страницы в поисках ссылок и форм (что, естественно, замедляет его работу, поэтому вывод один - не выключайте «куки» :) .
Итак, как можно работать с сессионными переменными? Тут есть несколько путей. Во-первых, можно воспользоваться специальными функциями для установки и чтения переменных из сессии. Вот некоторые из них:
- session_start() - старт сессии
- session_destroy() - закрытие сессии
- session_register() - регистрирует одну или несколько переменных в сессии
- session_unregister(string name) - убирает переменную из сессии
- session_unset() - очистка всех переменных сессии
- session_is_registered(string name) - проверка наличия переменной в сессии
Я думаю, особых проблем с использованием этих функций у вас возникнуть не должно. Функциям session_unregister и session_is_registered передается строка с именем необходимой переменной. Вот простой пример их использоваания:
<?php
if (!session_is_registered('count')) {
session_register("count");
$count = 0;
}
else {
$count++;
}
?>
Но вообще-то, этими функциями лучше не пользоваться, так как иногда они могут работать некорректно. Есть альтернативный вариант доступа к сессионным переменным - через глобальный массив $_SESSION (или $HTTP_SESSION_VARS в версиях PHP <= 4.0.6). Поэтому, если есть возможность, пользуйтесь именно ими. Теперь вышеприведённый пример будет выглядеть вот так:
<?php
// Используйте $HTTP_SESSION_VARS
// в PHP версии 4.0.6 или ниже
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
}
else {
$_SESSION['count']++;
?>
Для того, чтобы убрать переменную из сессии, нужно либо воспользоватся функцией unset($_SESSION['имя_переменной']), либо специальной функцией session_unregister('имя_переменной').
Внимание: если вы пользуетесь массивами $_SESSION или $HTTP_SESSION_VARS, вы НЕ МОЖЕТЕ использовать функции session_register(), session_unregister() и session_is_registred(). Поэтому выбирайте какой-то один способ, и придерживайтесь его на всём сайте.
Вот вкратце и всё, если есть какие-то вопросы - пишите, попробуем разобраться вместе. Или прочитайте руководство, свежая версия всегда доступна с официального сайта PHP: www.php.net/docs.php.
Перейти к рубрике --> PHP |