Теперь, когда вы представляете, как работают сеансы, давайте разберемся, что же практически нужно для корректной работы с сеансами. Как известно, каждый сеанс идентифицируется в РНР через идентификатор сеанса, который обычно сохраняется на клиентской машине в виде HTTP cookie-набора. Если поддержка cookie-наборов отсутствует, идентификатор сеанса должен передаваться через URL. Для этих целей в РНР существует константа SID, которая содержит имя и значение идентификатора текущего сеанса в следующем формате: <имя сеанса>=<идентификатор сеанса>
Поскольку иногда формат, предлагаемый SID, может быть неприемлемым (как будет показано, при передаче информации о сеансе через HTML-форму), в РНР предусмотрены две функции session_name () и session_id (), которые возвращают, соответственно, имя сеанса и его идентификатор. Независимо от используемого метода, идентификатор сеанса должен использоваться каждый раз, когда URL ссылается на внутренний ресурс. Например, при использовании гиперссылки обычно прекрасно работает константа SID:
<А HREF="checkout.php? ">Перейти к окончательному
расчету</А>
С другой стороны, при работе с HTML-формами, идентификатор сеанса передает-
ся с использованием скрытых элементов формы. В следующей ситуации для присваи-
вания соответствующих значений должны использоваться функции session_name () и
session_id():
<FORM ACTION="order.php" METHOD=GET>
<INPUT TYPE="hidden" NAME=""
VALUE="">
<!-- Остальной HTML-код формы //-->
</FORM>
При передаче идентификатора сеанса важно понимать, что это нужно делать, только если URL относится к локальному Web-серверу. Для предотвращения негативных последствий, связанных с безопасностью, идентификатор сеанса никогда не следует передавать во внешних URL.
Как вы уже, наверное, догадались, попытка проверить, что каждый возможный URL в вашем HTML-документе корректно передает идентификатор сеанса, быстро становится нудной задачей. В большинстве случаев URL может быть автоматически пересоздан за счет включения режима прозрачной передачи идентификатора сеанса, активизировав директиву конфигурации session ,use_trans_sid. Когда режим прозрачной передачи идентификатора сеанса включен, РНР пытается автоматически добавлять идентификатор сеанса к соответствующим HTML-дескрипторам.
НА ЗАМЕТКУ
Какие URL переписаны и будут посылаться в браузер, РНР определяет с помощью директивы конфигурации u r l _ r e w r i t e r .tags. В этой директиве задается разделяемый запятыми список, имеющий следующий формат: <HTML tag>=<Attribute> где <HTML tag> — это HTML-дескриптор, который должен быть обработан, a <Attr ibute> —это атрибут того HTML-дескриптора, который содержит URL для перезаписи. Значение по умолчанию для директивы u r l _ r e w r i t e r . tags выглядит так: url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
При использовании прозрачной передачи идентификатора сеанса РНР переписывает соответствующие URL только в целях безопасности. Несмотря на то что http://www.coggeshall.org/index.php и /index.php могут быть одним и тем же ресурсом, РНР добавит идентификатор сеанса только во втором случае. Это предотвратит уже рассмотренный риск отправки действующего идентификатора сеанса внешнему Web-сайту. Таким образом, при использовании прозрачной передачи идентифи- катора сеанса важно убедиться, что все локальные URL записаны с использованием подходящего формата URL.
|