Visual Basic 6. Руководство разработчика

Запись и чтение


Cookies

Стартовые страницы некоторых Web-узлов (например, компании

Microsoft) допускают настройку в соответствии с требованиями пользователя. Как это делается? Каким образом сервер хранит информацию о настройках, выполненных отдельными пользователями, в перерывах между сеансами? Если бы каждый пользователь имел фиксированный IP-адрес, можно было бы (хотя вряд ли это разумно) создать базу данных с IP-адресами и настройками для каждого пользователя. IP-адрес клиентского компьютера хранится в семействе ServerVariables объекта Server. Однако адреса клиентов изменяются от сеанса к сеансу. Поэтому единственный способ сохранить информацию о каждом отдельном клиенте — это ее запоминание на клиентском компьютере и считывание необходимых данных при подключении клиента к серверу. Запоминание этой информации в специальной папке на клиентском компьютере осуществляет броузер. Причем хранится она в cookie.

Примечание

Термин Cookies пришел из операционной системы Unix. Даже не пытайтесь понять, какое это имеет отношение к вашему компьютеру.

Cookies используются для обмена информацией между отдельными страницами одного узла. Предположим, необходимо создать Web-узел для пользователей, работающих в режиме

on-line. Узел может содержать множество страниц, и пользователь должен иметь возможность запрашивать данные с каждой из них. Каким образом сохранить информацию о том, к каким страницам обращался пользователь? Ведь каждая страница может иметь свой собственный сценарий и переменные, областью видимости которых она является. Протокол HTTP работает так: когда на клиентский компьютер поступает новая страница, броузер "забывает" всю информацию о текущей странице кроме ее URL (чтобы была возможность при необходимости вернуться к ней). И здесь весьма кстати оказываются cookies, в которых можно сохранить информацию с предыдущих страниц и организовать обмен данными между страницами одного узла.

Поскольку обработку cookies осуществляет броузер, Web-страницы не имеют прямого доступа к вашему жесткому диску: в этом смысле cookies являются безопасными. Когда страница запрашивает данные из cookies, броузер отслеживает, чтобы использовались только cookies, созданные страницами того же узла. То есть, если некоторые cookies созданы Web-узлом компании Microsoft, то их не могут прочесть страницы, принадлежащие другим узлам.


Cookies могут иметь "срок годности". Те из них, которые его не имеют, прекращают свое существование по окончании сеанса. В противном случае они остаются на клиентском компьютере до истечения этого срока.

Для записи cookies на клиентский компьютер используется свойство Cookies объекта Response. Свойство Cookies является семейством, его члены можно создавать и осуществлять к ним доступ по именам. Для создания нового cookie используется следующий оператор.

<% Response. Cookies ("FavoriteSport") ="Hockey" %>

Если cookie с именем FavoriteSport



уже существует на клиентском компьютере, его значение перезаписывается. В противном случае создается новый cookie, который существует до конца текущего сеанса.

Срок жизни cookie определяется с помощью его свойства Expires.

<% Response.Cookies ("FavoriteSport") .Expires = "December 31, 1998

12:00:00 GTM" %>

Другие свойства cookies перечислены ниже.

Domain (Домен).

Если значение этого свойства установлено, то данные этого cookie передаются только в ответ на запросы, поступившие из того же домена. Используется вместе со свойством Path.

Path (Путь). Если значение этого свойства установлено, то данные этого cookie передаются только в ответ на запросы, поступившие от страниц, находящихся на сервере в указанном пути.

HasKeys (Имеет ключи).

Указывает, имеет ли cookie множественные ключи (т.е. является словарем). Это свойство имеет атрибут "только для чтения".

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

<%

Response.Cookies ("Preferences") ("Books") = "Mystery"

Response.Cookies ("Preferences") ("News") = "Sports"

%>

Для чтения значений из cookie на клиентском компьютере используется семейство Cookies объекта Response. Количество cookie в семействе возвращается свойством Request.Cookies. Count.

Для сканирования элементов семейства используется цикл For...Next либо For Each...Next.



<%

For Each cookie In Request.Cookies

  { обработка текущего cookie, которым является Request.Cookies(cookie)}

Next cookie

%>

Обычно серверному сценарию известны имена cookies, поэтому доступ к ним можно осуществлять по именам.

BookType = Request.Cookies ("FavoriteSport")

При необходимости можно выяснить имена cookies, воспользовавшись циклом For Each...Next. На каждой итерации цикла значение переменной cookie

является именем очередного cookie, а переменная Request. Cookies(cookie) — его значением.

Если cookie имеет ключи, то доступ к ним осуществляется как к элементам семейства. Предположим, вы передали cookie, имеющий ключи, на клиентский компьютер.

<%

Response.Cookies ("Background") = "Planets.bmp"

Response.Cookies ("Preferences") ("Books") = "Mystery"

Response.Cookies ("Preferences") ("News") = "Sports"

%>

Первый cookie задает узор фона, который предпочитает пользователь. Пара следующих значений используется для создания стартовой страницы. Цикл, который читает все значения cookie, включая ключи, приведен ниже.

<%

For Each cookie In Request.Cookies

If Request.Cookies(cookie).HasKeys Then

For Each scookie In Request.Cookies(cookie)

{Обработка текущего cookie. Его значением является Request.Cookies(cookie)(scookie) }

Next

Else

{ Обработка текущего cookie. Его значением является Request.Cookies(cookie)}

End If

Next

%>

Организация обмена данными между страницами - далеко не единственное применение cookies. Каждый узел, имеющий настраиваемую стартовую страницу, использует их для хранения информации о пользователях. Некоторые Web-узлы используют cookies для запоминания информации о темах, обращение к которым происходит чаще всего.


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