Основы использования сеансов

В этом разделе обсуждаются основы регистрации, отмены регистрации и работы с сеансовыми переменными в РНР. Важно заметить, что манипулирование сеансовыми переменными с помощью представленных здесь функций, таких как session_register(), session_unregister() и session_is_registered(), возможно только при активной директиве register_globals. Если эта директива не активна {что рекомендуется), то всеми сеансовыми переменными нужно манипулировать с использованием суперглобального массива $_SESSION. (more…)

Tags: , ,

Related posts

Сеансы РНР

Одним из наиболее полезных применений cookie-наборов является возможность создания сеансов, которые в действительности позволяют преодолеть отсутствие поддержки состояния протокола HTTP. При работе с сеансами в РНР есть возможность сохранять переменные (включая массивы и классы) между запусками сценариев и вызывать их позднее. Для функционирования такой системы Web-сервер должен иметь возможность отличать один браузер от другого, и в этом заключается роль cookie-наборов. В отличие от предыдущего примера, в котором используются cookie-наборы для определения имени посетителя, сеансы не сохраняют какой-либо значащей информации на машине клиента. По аналогии с (more…)

Tags: , ,

Related posts

Отмена регистрации сеансовых переменных

Существуют моменты (например, когда пользователь покидает сайт), когда сеансовые переменные нужно удалить. Это можно сделать, уничтожив весь сеанс или удалив только некоторые сеансовые переменные. Для удаления определенных переменных можно использовать оператор unset, удаляющий элемент из су пер глобального массива S_SESSION, или использовать PHP-функцию session_unregister О. Синтаксис функции session_unregister () имеет вид:
session_unregister(Sname) (more…)

Tags: , ,

Related posts

Реализация cookie-наборов в сценариях

Теперь, когда мы познакомились с реализацией cookie-наборов, посмотрим, как применить эти знания для создания cookie-наборов, используемых внутри сценариев.
Наиболее очевидным методом установки cookie-набора в PHP-коде является создание заголовка Set-Cookie с помощью PHP-функции header (), как показано в листинге 6.2.
Листинг 6.2. Установка cookie-набора с использованием функции header ()

header("Set-Cookie: mycookie=myvalue; path=/; domain=.coggeshall.org");

Поскольку эта функция используется для отправки HTTP-заголовков, она должна быть выполнена до пересылки содержимого {например, с помощью операторов echo или print). Хотя это работает, такой метод не может быть рекомендован для установки cookie-наборов с использованием PHP-функций. Чуть позже мы рассмотрим функцию setcookie (), используемую для решения этой задачи.
Второй (и, возможно, менее известный) метод установки cookie-наборов — использование HTMI.-дескрипторов. В частности, HTML-дескриптор <МЕТА> можно использовать для имитации HTTP-заголовков внутри HTML-страницы, применяя атрибуты HTTP-EQUIV и CONTENT. Например, чтобы установить такой же cookie-набор, как в листинге 6.2, можно воспользоваться HTML-кодом, представленным в листинге 6.3.
Листинг 6.3. Установка cookie-набора с использованием HTML-дескриптора <мета>

<МЕТА HTTP-EQUIV-"Set-Cookie"
CONTENT="mycookie=myvalue; path=/; domain=.coggeshall.org">

НА ЗАМЕТКУ -
Дескриптор хорош не только для установки cookie-наборов. Несмотря на то что он зависит от используемого браузера, большинство известных браузеров поддерживают НТТР-э а головки, заключенные в дескриптор <МЕТА>. Например, с помощью HTTP-заголовка Refresh можно перенаправить браузер на новую страницу:
<МЕТА HTTP-EQUIV=11 Refгеsh" CONTENT="0; url=http://www.coggeshall.org">
Третий и возможно наиболее известный метод установки cookie-наборов — использование PHP-функции setcookie (). Функция setcookie [) имеет следующий синтаксис:
setcookie (Sname [,$value [, $expire [, $path [, Sdomain [, $secure] ] ] ] ]);
Эта функция применяется как для создания, так и уничтожения cookie-наборов в клиентском браузере. Как и в случае с отсылкой HTTP-заголовков из РНР-сценария, эта функция должна быть выполнена до отправки клиенту любого содержимого. Перед тем как перейти к исследованию этой функции, вкратце рассмотрим каждый параметр. Для большинства частей назначение каждого параметра такое же, как и у за-головка Set-Cookie, рассмотренного ранее. В частности, Sname представляет имя переменной cookie-набора, Svalue — ее текущее значение, Sexpire — метка времени Unix актуальности cookie-набора, Spath — путь на сервере, для которого создан cookie-набор, Sdoraain — домен, для которого создан cookie-набор, и, наконец, Ssecure — это булевское значение, показывающее, что cookie-набор создан только для защищенного HTTP.
При использовании функции setcookie!) любые необязательные параметры мо-гуг быть при необходимости установлены в NULL. В листинге 6.4 показа пример применения функции setcookie!) для установки cookie-набора, аналогичного приведенному в листинге 6.2.
Листинг 6.4, Использование функции setcookie ()

setcookie("mycookie", "myvalue", NULL, "/", ".coggeshall.org");

Если нужно изменить значение cookie-набора, как в случае, когда мы напрямую работали с заголовком Set-Cookie, нужно убедиться, что значения Spath, Sdomain и Sname функции setcookie!) идентичны первоначально использованным. Для удаления cookie-набора можно использовать небольшую хитрость — задать параметр $value равным NULL (при этом параметры Spath, Sdomain и Sname должны быть установлены должным образом). Пример удаления cookie-набора, установленного в листинге 6.4, представлен в листинге 6.5.
Листинг 6.5. Удаление cookie-набора с использованием функции setcookie ()

setcookie("mycookie", NULL, NULL, ".coggeshall.org");

После того как cookie-набор установлен, он остается неактивным до момента, когда браузер запросит у Web-сервера другой документ. Для получения доступа к значению cookie-набора, полученного от браузера, РНР использует суперглобальный массив S_C0OKIE. Этот массив аналогичен массивам 5GET и $_P0ST за исключением того, что он хранит значения cookie-наборов. Каждый ключ в этом суперглобальном массиве представляет отдельный cookie-набор (имя ключа — это имя переменной cookie-набора) .
Для иллюстрации этого примера выполним обитую задачу и напишем сценарий, определяющий, активен ли cookie-набор на клиентском браузере. Для этого, во-первых, потребуется создать cookie-набор, а потом заставить браузер перезагрузить страницу. Когда браузер перезагрузит страницу, он, если примет этот cookie-набор, немедленно вернет его серверу. Проверив наличие этого cookie-набора при перезагрузке страницы, можно проверить работоспособность cookie-набора.
Единственная хитрость в этом сценарии — определить, был ли установлен cookie-набор или браузер по какой-либо причине его отверг. Для того чтобы дать возможность сценарию определить, был ли установлен cookie-набор, при перенаправлении браузера необходимо использовать параметр GET, как показано в листинге 6.6.

Tags: , ,

Related posts