САМОУЧИТЕЛЬ PHP 4

       

Неявное изменение гиперссылок


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

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

<?session_start()?>

<body>

<a href=/path/to/something.php>Click here!</a><br>

<a href=/path/to/something.html?a=aaa&b=bbb>Click here!</a><br>

<a href=/>Click here!</a><br>

</body>

Вот адреса этих ссылок с точки зрения браузера:

http://www.somehost.ru/path/to/something.php?PHPSESSID=8114536a920bfb01f

http://www.somehost.ru/path/to/something.html?a=aaa&b=bbb&PHPSESSID=86a20

http://www.somehost.ru/?PHPSESSID=8114536a920bfb2a

(Я немного урезал идентификаторы сессий, чтобы они уместились на странице этой книги.) Обратите внимание на второй адрес: он говорит, что идентификатор корректно вставился в конец обычных параметров страницы. Третий пример заставляет задуматься о том, что идентификатор сессии прикрепляется к URL независимо от типа документа,

на который он указывает.

Описанная только что возможность работает лишь в том случае, если в настройках PHP установлен в значение истина параметр session.use_trans_sid.

Он как раз и включен по умолчанию.

Зачем же тогда нужна константа SID? Да незачем. Это — устаревший прием передачи идентификатора сессии, и я привел его здесь только для того, чтобы нарисовать более полную картину, что в действительности происходит, а также показать, насколько иногда PHP может быть услужлив.



Содержание раздела