Справочник по PHP : Управляющие функции : Управление сессиями : Про сессии и Cookies

смотрим также

Материал из Справочник Web-языков

Перейти к: навигация, поиск


Проблема: - отключены Cookies

Бытует распространенное мнение, что сессии без Cookies не может существовать. Действительно, Cookies наиболее просто решает проблему идентификации пользователя, что необходимо для связи временного хранилища и данных сессии. Но вот что делать, если пользователь у себя в настройках отключил прием Cookies?

На этот случай разработчики PHP позаботились о передаче идентификаторов сессии не в Cookies, а каким-нибудь аналогичным путем, например, через адресную строку браузера.

Решение: - изменение гиперссылок и форм

В PHP существует одна специальная константа с именем SID. Она всегда содержит имя группы сессии и ее идентификатор в формате имя=идентификатор. Именно в таком формате данные принимаются, когда они приходят из Cookies браузера. Таким образом, нам достаточно просто передать значение константы SID в сценарий, чтобы он "подумал", будто бы данные пришли из Cookies. Вот пример использования сессий без Cookies:

<?php
session_name("testses");
session_start();
session_register("i");
$i=@$i+1;
?>

Вы открыли эту страницу

Нажмите для записи в счетчик!

Этот пример будет работать, если у пользователя действительно отключены Cookies. Если они включены, PHP просто не будет генерировать константу SID и задействует Cookies.

Но в приведенном способе есть одно неудобство, а именно, везде в участки кода нужно вставлять <?=SID?>, и если вы где-то пропустили, то программа может не работать!

К счастью, разработчики PHP учли эту возможность и решили уберечь нас от этого. Поэтому если в какой-нибудь гиперссылке вы по ошибке пропустите <?=SID?>, PHP вставит его автоматически, при этом не повредив остальные параметры, которые могут присутствовать в URL.

Для проверки можно использовать следующий пример:


PHP
PHP - выражения

Вот что получится при наведении мышки на эти ссылки:

http://www.spravkaweb.ru/php.php?PHPSESSID=81456f6a886f2104
http://www.spravkaweb.ru/php.php?ss=1&PHPSESSID=34f5d04a35601510f45

В PHP существует еще одна возможность использовать сессии с отключенными Cookies - добавление скрытых полей в формы, которые формируют сценарий, чтобы передать идентификатор сессии вызываемому документу.

Приведем пример, который выявляет эту возможность:


А вот что получится при просмотре нашей страницы в виде HTML:

<form action="act.php" method="post">
<INPUT TYPE=HIDDEN NAME="PHPSESSID" VALUE="0a561093f84d4321">
</form>

Из примера мы видим, что PHP добавил в форму скрытое поле с нужным именем и значением.

Добавить страницу в закладки:
РАЗРЕШАЕТСЯ перепечатывать и копировать информацию ТОЛЬКО ПРИ РАЗМЕЩЕНИИ ссылки на оригинал!
(<A href="http://www.spravkaweb.ru/">Справочник Web-языков</A>)
другие проекты
Rambler\'s Top100 Индекс цитирования