Еще не забыли про cookie? Давайте немного освежим память. Итак, это - небольшие кусочки информации, которые сервер записывает на Ваш компьютер для того, что бы сохранить персональные данные, например. Если только… Браузер или сторонние программы разрашают это делать. А как же быть, если пользователь все же выключил прием cookie у себя в настройках? Выход есть, и он нам тоже доступен. Я говорю о сессиях, поддержка которых появилась в PHP начиная с версии 4.
Что такое сессии и зачем они нужны? Давайте потеоретизируем. Представьте, заходит человек к Вам на сайт, Ваша программ фиксирует это, и присваивает ему определенный номер, который автоматически сохраняется в памяти на диске сервера. В дальнейшем, по этому номеру, не сложно определить что именно интересовало посетителя на сайте, какие именно странички он смотрел и что он там делал. Заманчиво? Это еще далеко не все!
Один из недостатков CGI-интерфейса, на основе которого и работают все браузеры заключается в том, что программа должна отработать и завершить соединение, инициализированное клиентом. И все данные, полученные в результате такой работы вынужденно теряются. Так вот, сессии позволяют избавиться от этого недостатка, сохраняя нужные программисту данные на диске сервера до нужного времени.
Вы скажете, что тут надо применить Cookie? И будете совершенно правы. Но! Если они, эти самые cookie отключены, ничего не получится, и мы потеряем посетителя. Хорошо, если это просто Вася Пупкин, а если оптовый покупатель Интернет-магазина? Тут уже не до шуток, пахнет саботажем! Так что от cookie лучше отказаться, тем более что как всегда есть способ лучше.
Для идентификации пользователя используется идентификатор сессии - SID. Именно с его помощью можно определить, какой пользователь запустил сценарий. Идентификатор сессии хранится в Cookie броузера - вот для чего нужны эти Cookie! Фактически, SID - это имя временного хранилища, то есть имя временного файла, в котором PHP4 хранит информацию о сессии. Обычно эти файлы размещаются в каталоге /tmp на диске сервера. Но не на диске пользователя. Вот этим и отличаются cookie от сессий.
Есть и еще одно важное отличие. Дело в том, что если cookie отключены, SID все равно передается, но уже при помощи методов GET или POST, в зависимости от ситуации и более выгодного положения дел.
Для примера всей этой беды давайте попробуем сделать персональный счетчик на сессии.
<?
session_name("virtualbrest");
session_start();
session_register("counter");
$counter = @$counter +1; ?>
<html><body>Нажмите кнопку ОБНОВИТЬ,
чтобы увеличить счетчик
<br>Счетчик: <?=$a?>
</body></html>
В первой строчке кода мы инициализируем имя сессии для SID, что бы в дальнейшем можно было легко различать разные сессии. Если этого не сделать, PHP автоматически откроет сессию с именем PHPSESID. Функция session_start() инициализирует сессию, а функция session_register("counter") регистрирует в сессии переменную $counter. Имена переменных задаются без знака доллара. Можно несколько раз регистрировать одну и ту же переменную в сессии, ее значение все рвно будет сохранено.
Вот список еще некоторых полезных нам функций.
· Проверить зарегистрирована ли переменная в сессии позволяет функция session_is_register(string $name).
· Отменить регистрацию какой-нибудь переменной можно с помощью функции session_unregister(string $name).
· Отменить регистрацию ВСЕХ переменных сессии можно с помощью функции session_unset().
Если запустить данный код и несколько раз обновить окно браузера, мы увидим, как счетчик увеличивается.
Итак, именно в этом примере параметр SID передается браузером посредством cookie. Но этот пример носит чисто теоретический характер.