Значения файлов cookie намного сложнее, чем значения других коллекций ASP, таких как Form и ServerVariables. Файл cookie — это небольшой фрагмент текста, который сохраняется браузером в клиентской системе и отправляется с каждым запросом на сервер в домене, к которому они применяются.
ASP упрощает применение файлов cookie. Вы можете получить все значения файлов cookie, отправленные с запросом, из коллекции файлов cookie объекта Request, а также создавать или изменять файлы cookie и отправлять их обратно пользователю через коллекцию файлов cookie объекта Response. объект.
Файлы cookie содержат информацию, которая может быть создана двумя способами. Файлы cookie с одним значением предоставляют свои значения для кода через общую коллекцию, подобную ASP. Однако каждый член коллекции сам может быть коллекцией, а файлы cookie, содержащие эту информацию, называются многозначными файлами cookie.
Создать однозначный файл cookie относительно просто:
Response.Cookies("item-name") = "item-value"
Чтобы создать многозначный файл cookie, вы можете использовать следующую команду:
Response.Cookies("item -name" )("sub-item-name") = "sub-item-value"
устанавливает домен и путь применения файлов cookie, а также период их действия. Мы используем:
Response.Cookies("item-name").domain = "URL-адрес домена"
Response.Cookies("имя-элемента").path = "виртуальный-путь"
Response.Cookies("item-name").expires = #date#
Обычно клиент отправляет файл cookie на сервер только вместе с запросом при запросе страницы в каталоге, где был создан файл cookie. Указав атрибут пути, вы можете указать, где на сайте действителен этот файл cookie, и этот файл cookie будет отправлен вместе с запросом. Если файл cookie отправляется с запросами страниц для всего сайта, установите путь «/».
Если атрибут Expires не установлен, файл cookie будет автоматически удален при закрытии текущего экземпляра браузера.
Обратите внимание, что файл cookie уже создается, когда мы отправляем какие-либо данные в браузер. Потому что эти файлы cookie являются частью HTTP-заголовка страницы.
В ASP 3.0 состояние буферизации по умолчанию включено, и выходные данные не отправляются, если для этого не используется Response.Flush или страница не достигла конца. Это означает, что код, создающий файл cookie, может находиться в любом месте страницы и выполняться до тех пор, пока какой-либо вывод не будет «сброшен» клиенту.
Чтобы прочитать существующие файлы cookie, используйте коллекцию Request.Cookies. Доступ к элементам внутри можно получить индивидуально, аналогично методу, используемому для их создания.
StrSingleValue = Request.Cookies("имя-элемента")
StrSubItemValue = Request.Cookies("имя-элемента")("имя-подэлемента")
Обратите внимание, что коллекция Request.Cookies (как и все другие коллекции Request) доступна только для чтения. Коллекция Response.Cookies доступна только для записи. Фактически вы можете получить доступ к именам серий файлов cookie в этой коллекции, но не к их значениям.
Обход коллекции файлов cookie.
Для более удобного использования коллекции файлов cookie вы можете использовать дополнительный атрибут с именем Haskeys. Если файл cookie, к которому осуществляется доступ, сам по себе является коллекцией, то есть является многозначным файлом cookie, это вернет значение True. Используя свойство Haskeys, вы можете перебирать всю коллекцию Request.Cookies, чтобы получить список всех файлов cookie и их значений.
Для каждого объекта в Request.Cookies
Если Request.Cookies(objItem).HasKey Тогда
'Используйте другой For Each для повторения всех подразделов
Для каждого objItemKey в Request.Cookies(objItem)
Response.Write objItem & "(" & objItemKey & ") = "_
& Request.Cookies(objItem)(objItemKey) & «<BR>»
Следующий
Еще
'Распечатываем строку cookie как обычно
Response.Write objItem & «=» & Request.Cookies(objItem) & «<BR>»
Конец, если
NextThis
очень похож на предыдущий сложный код, извлекающий несколько значений из коллекции Request.Form. Но здесь вы можете использовать атрибут Haskeys, чтобы определить, является ли каждая запись набором. В примере с формой необходимо запросить свойство Request.Form(item_name).Count, поскольку члены коллекции Form (и всех других коллекций, кроме файлов cookie) не могут быть настоящими коллекциями. ASP просто выполняет «закулисную» работу и получает значение каждой коллекции с несколькими входами.
Различия между Form и QueryString
После понимания методов доступа к различным коллекциям ASP необходимо решить еще один вопрос: в чем разница между коллекциями Form и QueryString? Если вы собираетесь использовать ASP, вам, несомненно, следует знать об этой разнице, но вам нужно обратиться к тому, как работает HTTP, чтобы заново понять и понять их.
Существует два основных метода запроса страницы или другого ресурса с веб-сервера через HTTP. Вы можете использовать метод GET для непосредственного получения ресурса или использовать POST для передачи значения соответствующему ресурсу. Метод GET используется по умолчанию. Вы можете посмотреть пример HTTP-запроса ранее в этой главе:
08.07.99 10:27:16 Отправлено GET /Store/Download.asp HTTP/1.1
Если вы поместите одну или несколько пар. имена. Когда значение / добавляется к URL-адресу запрошенной страницы, оно становится запрошенной строкой запроса и предоставляется странице ASP в коллекции QueryString. При щелчке гиперссылки на веб-странице, сообщении электронной почты или другом документе, вводе адреса в адресной строке браузера и нажатии клавиши «Ввод» или нажатии кнопки «Ссылки» или «Избранное» в браузере используется метод GET.
Поэтому единственный способ передать значения в ASP в этих действиях — через коллекцию QueryString, добавляя значения в URL.
Значения, которые появляются в коллекции Request.QueryString и к которым осуществляется доступ, работают так же, как экземпляр коллекции Form, который мы видели ранее. Комбинация URL-адреса и строки запроса:
http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
Доступ к значению, указанному в коллекции QueryString, можно получить следующим образом:
strFirstName = Request.QueryString("FirstName") 'Return "Присцилла"
strLastName = Request.QueryString("LastName") 'Вернуть "Декарт"
strRaw = Request.QueryString
'Возвращает
методы GET и POST формы "FirstName=Priscilla&LastName=Descartes".
При использовании сегмента <FORM> на странице вы можете установить значение атрибута METHOD открытого тега FORM равным "GET" или "POST". значение по умолчанию — «GET». Если используется «GET» или его атрибут опущен, браузер привязывает это значение ко всем элементам управления на странице, становится строкой запроса и прикрепляется к URL-адресу запрошенной страницы.
Когда этот запрос поступает на веб-сервер, его значение предоставляется коллекцией Request.QueryString ASP. Однако если для атрибута METHOD установлено значение «POST», браузер помещает значение в HTTP-заголовок отправляющего сервера и передает его ASP через коллекцию Request.Form.
Кстати, метод POST можно использовать во всех HTML-формах. Однако существуют определенные ограничения на длину строки URL-адреса браузера или сервера. Таким образом, добавление длинных строк может привести к переполнению и усечению некоторых строковых символов. При этом строка запроса появляется в адресной строке браузера, а также во всех сохраненных ссылках и избранном. Мало того, он также предоставляет нежелательные значения в HTTP-запросе при прохождении через веб-сервер, а также может появиться в файлах журналов вашего сервера и других серверов маршрутизации. Значения в заголовках HTTP-запросов редко видны и не отображаются в файлах журналов.
Небольшая проблема, которую следует отметить при использовании метода POST, заключается в том, что когда пользователь повторно загружает <FORM>, значения формы больше не сохраняются, а их значения пусты и должны быть введены повторно. Однако при прикреплении к URL-адресу значение сохраняется в виде ссылки и поэтому будет отображаться во всех запросах, в которых URL-адрес объединен со строкой. Это может быть преимуществом или недостатком в зависимости от приложения. может автоматически сохранять значения на странице в определенном диапазоне на клиенте).
Еще один момент: комбинация URL-адреса и строки запроса не может содержать пробелов или других недопустимых символов, иначе у Навигатора и некоторых других браузеров возникнут проблемы. Недопустимыми символами являются символы, используемые для разделения URL-адреса и строки запроса, например «/», «:», «?» и «&» (IE может автоматически преобразовывать пробелы в правильный формат — знак плюса «+», но другие недопустимые символы не могут быть обработаны)
Использование файлов cookie в ASP.
В этом разделе мы изучим различные методы, которые предоставляют коллекции, методы и свойства для использования кодом ASP.
1) Данные пользователя хранятся в файлах cookie.
Файлы cookie могут использоваться для хранения двух типов значений: значений, которые мы не хотим сохранять при закрытии браузера (например, информация о регистрации пользователя), и значений, которые мы хотим сохранить. сохраняться, когда пользователь посещает сайт. В каждом случае значение файла cookie доступно ASP для каждого запроса страницы из браузера пользователя.
Однако вам необходимо помнить, что файл cookie будет отправлен на сервер только тогда, когда будет сделан запрос на страницу в пределах виртуального пути (пути) в файле cookie. По умолчанию, если значение пути не установлено в файле cookie, его значением является виртуальный путь к странице, создавшей файл cookie. Чтобы файл cookie отправлялся на все страницы сайта, необходимо использовать path="/".
Вот пример. На пользовательской странице входа регистрационная информация пользователя сохраняется в файле cookie. Поскольку период действия приложения не установлен, значение файла cookie сохраняется только до закрытия браузера:
...
Request.Cookies("Пользователь")("UID") = "<% = Request("ИмяПользователя") %>"
Request.Cookies("Пользователь")("PWD") = "<% = Request("Пароль") %>"
Request.Cookies("User").Path = "/adminstuff" 'Применяется только к страницам администрирования.
...
этот файл cookie теперь будет находиться на каждой странице, которую пользователь запрашивает из каталога adminstuff или его подкаталогов. Если его не существует, вы можете перенаправить пользователя на страницу регистрации:
If (Request.Cookies("User")("UID") <> "alexhomer") _
Или (Request.Cookies("Пользователь")("PWD") <> "секрет") Тогда
Response.Redirect «login.asp?UserName=" & Request.Cookies("Пользователь")("UID")
Конец, если
...
Поскольку имя пользователя в файле cookie помещается в строку запроса URL-адреса Response.Redirect, если при вводе пароля возникает ошибка и вы хотите, чтобы пользователю не приходилось повторно вводить имя пользователя, вы можете использовать его при входе в систему. страница asp:
<FORM ACTION="check_user.asp" METHOD="POST">
<INPUT TYPE="ТЕКСТ" NAME="Имя пользователя"
VALUE="<% = Request.QueryString("Имя пользователя") %>"><P>
<INPUT TYPE="SUBMIT" VALUE="LOGIN">
</FORM>
2) Изменение существующих файлов cookie.
Вы можете использовать ASP для изменения существующих файлов cookie, но вы не можете изменить только одно значение в файле cookie. При обновлении файла cookie в коллекции Response.Cookies существующее значение будет потеряно. Мы можем создать файл cookie с помощью следующего кода, который можно использовать:
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("VisitCount")("LastDate") = Сейчас
Response.Cookies("VisitCount")("Посещения") = CStr(intVisits)
Response.Cookies("VisitCount").Path = "/" 'Применить ко всему сайту
Response.Cookies("VisitCount").Expires = DateAdd("m",3,Now)
Если вы хотите обновить значения Visits и LastDate, необходимо сначала не менять все значения, а затем переписать весь файл cookie :
datDtart = Ответ .Cookies("VisitCount")("StartDate")
intVisits = Response.Cookies("VisitCount")("Посещения")
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("VisitCount")("LastDate") = Сейчас
Response.Cookies("VisitCount")("Посещения") = Cstr(intVisits)
Response.Cookies("VisitCount").Path = "/"
Response.Cookies("VisitCount").Expires = DateADD("m",3,Now + 1) и, как и почти все другие методы и свойства Response, это следует сделать перед записью чего-либо (т. е. открытия тега <HTML> или любой текст или другой HTML) в ответ.