| |
pen", "ses_close",
"ses_read", "ses_write",
"ses_destroy", "ses_gc"
);
// Для примера подключаемся к группе сессий test
session_name("test");
session_start();
session_register("count");
// Дальше как обычно...
$count=@$count+1;
?>
Счетчик
В текущей сессии работы с браузером Вы открыли эту страницу
=$count?> раз(а). Закройте браузер, чтобы обнулить этот счетчик.
Сессии и Cookies
До сих пор я подразумевал, что использование сессий немыслимо без Cookies.
Дейст-
вительно, Cookies представляют собой наиболее элегантное и простое решение
задачи
идентификации каждого подключившегося пользователя, что необходимо для связи
временного хранилища и данных сессии. Но как быть, если пользователи отключили
Cookies в своих браузерах?
Глава 25. Управление сессиями 357
К сожалению, пользователи отключают Cookies гораздо чаще, чем это может
показаться на первый взгляд. Например, всего год назад Всероссийский Клуб
Вебмастеров проводил опрос, в результате которого выяснилось, что количе-
ство пользователей Интернета, отключивших у себя по каким-то соображениям
поддержку Cookies, достигает 20—30%. Что это за соображения? Многие ду-
мают, что Cookies потенциально являются "дырой" в безопасности их компью-
тера. Это совершенно не соответствует действительности, потому что браузе-
ры всегда имеют ограничения на количество и суммарный объем Cookies,
которые могут быть в них установлены. Другие же просто не хотят, чтобы неиз-
вестно кто писал что угодно на их жесткий диск. Правда, это не мешает таким
"перестраховщикам" открывать пришедший по почте исполняемый файл — та-
кой же, как из письма типа "Love letter"…
В общем, вы видите, что для абсолютной уверенности в работоспособности ваших
сценариев на любом браузере нужен механизм, позволяющий отказаться от исполь-
зования Cookies при управлении сессиями. Такой механизм действительно
существует в PHP, и основная его идея состоит в том, чтобы передавать
идентификатор сессии не в Cookies, а каким-нибудь аналогичным путем — например,
в данных запроса GET. Последнее мы сейчас и рассмотрим.
Явное использование
константы SID
В PHP существует одна специальная константа с именем SID. Она всегда содержит
имя группы текущей сессии и ее идентификатор в формате имя=идентификатор.
Вспомните: именно в таком формате данные принимаются, когда они приходят из
Cookies браузера. Таким образом, нам достаточно просто-напросто передать
значение
константы SID в сценарий, чтобы он "подумал", будто бы данные пришли из Cookies.
Вот пример:
Листинг 25.3. Sesget.php: простой пример использования сессий без Cookies
session_name("test");
session_start();
session_register("count");
$count=@$count+1;
?>
Счетчик
В текущей сессии работы с браузером Вы открыли эту страницу
Часть IV. Стандартные функции PHP 358
=$count?> раз(а). Закройте браузер, чтобы обнулить этот счетчик.
>Click here!
Если набрать в браузере адрес вроде такого:
http://www.somehost.ru/sesget.php
то создастся новая сессия с уникальным идентификатором. Разумеется, если сразу
же
нажать кнопку Обновить, счетчик не увеличится, потому что при каждом запуске
будет создаваться новое временное хранилище — у PHP просто нет информации об
идентификаторе пользователя. Теперь обратите внимание на предпоследнюю строчку
листинга 25.3. Видите, как хитро мы передаем в сценарий, запускаемый через
гипер-
ссылку, данные об идентификаторе текущей сессии? Теперь с его точки зрения они
якобы пришли из Cookies…
Все будет работать так, как описано, только в том случае, если в браузере
действительно отключены Cookies. Если же они вклю
|
|