PHP. Способы управления сеансами. Работа с теневыми посылками.




Управление сеансом. Как известно, HTTP-протокол не имеет средств сохранения информации о состоянии. Каждый новый выполняющийся скрипт «не знает», что выполнялось до него остальными. Для этого придуманы «сессии» или «сеансы работы пользователя». Т.е. для того чтобы настойки (имя и.т.д) сохранялись при переходе по скриптам.

Если в двух словах, то сессии — это набор особых функций, интегрированных в PHP, которые могут сохранять так называемые «сессионные» переменные (то есть переменные, которые могут быть доступны для всех выполняющихся одним и тем же пользователем скриптов).

Сессии работают следующим образом. При вызове специальной функции, обозначающей старт сессии (session_start()) PHP-интерпретатор выполняет действия: во первых, он проверяет, не установлена ли переменная $PHPSESSID, если нет, то: 1) генерирует случайный идентификатор сессии $PHPSESSID, который представляет из себя 32-символьную строку 2) потом создает специальный файл, в который будут сохраняться переменные, и присваивает ему имя вида «sess_» + индикатор сессии. 3) понятно, если переменная $PHPSESSID уже установлена, то интерпретатор просто открывает нужный файл и после этого все переменные, определенные ранее в сессии, будут доступны, как и обычные, простым обращением «$имя_переменной» Нужно передать переменную $PHPSESSID во все скрипты, к которым можно перейти по ссылке. Делается это двумя способами: при помощи cookie (по умолчанию) или присоединением к каждой ссылке GET-параметра и hidden-поля к каждой форме.

cookie-набор — это небольшой фрагмент информации, который сценарии сохраняют на клиентской машине. Чтобы установить cookie-набор на машине пользователя, необходимо отправить ему HTTP-заголовок, содержащий данные в следующем формате.

Set-Cookie: NAME=VALUE; [expires=DATE;] [path=PATH;] [domain=DOMAIN_NAME;] [secure]

Это создаст cookie-набор с именем NAME и значением VALUE. В expires задается дата истечения срока действия, после наступления которой cookie-набор перестанет рассматриваться как актуальный. Если дата истечения срока действия не задана, cookie-набор будет постоянным, пока его кто-нибудь не удалит вручную. Два параметра path и domain применяются для определения одного или нескольких URL, к которым относится данный cookie-набор. Ключевое слово secure означает, что cookie-набор не может отправляться через простое HTTP-соединение.

Когда браузер соединяется с URL, он сначала ищет cookie-наборы, хранящиеся локально. Если какие-либо из них относятся к URL, с которым установлено соединение, они передаются обратно на сервер.

Установка cookie-наборов из РНР. cookie-наборы в РНР можно установить вручную, используя функцию setcookie(). int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

Если cookie-набор установлен как setcookie ("mycookie", "value");

то когда пользователь обращается к следующей странице на сайте (или перезагружает текущую страницу), можно получить доступ к переменной с именем $mycookie, которая содержит значение "value". Доступ к этой переменной можно получить также через $HTTP_COOKIE_VARS["mycookie"].

Для удаления cookie-набора необходимо вызвать setcookie() с тем же именем, но без указания значения. Если cookie-набор устанавливался с другими параметрами (такими как специфические URL или даты истечения), потребуется отправить те же параметры повторно, иначе cookie-набор удален не будет.

Для установки cookie-набора вручную можно воспользоваться также функцией Header() и описанным выше синтаксисом представления cookie-набора. Однако при этом следует иметь в виду, что заголовки cookie-наборов должны отправляться перед всеми другими заголовками.

Использование cookie-наборов в сеансах. В сеансе РНР нет необходимости задавать cookie-наборы вручную. Это за вас сделают функции сеанса. Для того чтобы просмотреть содержимое cookie-набора, установленное при управлении сеансом, можно воспользоваться функцией session_get_cookie_params(). Она воз­вращает ассоциативный массив, содержащий элементы lifetime, path и domain.

Можно использовать также: session_set_cookie_params($lifetime, $path, $domain);

Этот оператор устанавливает параметры cookie-набора для сеанса.

При использовании cookie-наборов возникают некоторые проблемы: есть браузеры, которые не принимают cookie-наборы, а есть пользователи, которые запрещают использование cookie-наборов в своих браузерах. Это одна из причин, по которым в сеансах РНР используются двойной метод cookie-набор/адрес URL.

Сохранение идентификатора сеанса (с использованием URL) В РНР cookie-наборы в сеансах используются по умолчанию. Другой метод, который может применяться в РНР, заключается в добавлении идентификатора сеанса к адресу URL. Чтобы идентификатор сеанса добавлялся к URL автоматически нужно скомпилировать РНР с опцией --enable-trans-sid.

Идентификатор сеанса будет запоминаться в константе SID. Для того, чтобы передать его вручную, его можно добавить в конец ссылки, аналогично параметру GET: <А HREF="link.php?<?=SID?>">

Константа SID может использоваться для вышеописанных целей только в том случае, если конфигурация РНР выполнялась с --епаblе-track-vars.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: