11.4.4. Установка и считывание файлов cookie

Несмотря на различия, переменные формы и строки запроса имеют важное сходство, – после отправки данных от одной страницы к другой они удаляются из памяти протокола HTTP.

Нередко при создании веб-приложений требуется, чтобы определенные данные сохранялись и после операции обмена. Формы и строки запросов не дают такой возможности, тем не менее, существуют типы переменных, которые после операции обмена остаются в памяти. В обход ограничений, накладываемых протоколом HTTP, значения переменных сохраняются на жестком диске пользователя или на сервере, и после этого могут считываться оттуда, когда в них возникает необходимость.

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

Здесь используется приложение формы, но на этот раз, когда введенные данные подтверждены и посетитель перенаправляется на страницу test_form_processor.asp, а имя и фамилия сохраняются в файле cookie на его жестком диске. Затем будет создана третья страница, запрашивающая эти значения (без использования переменных форм или строк запроса), на примере которой показано, что переменные firstName и lastName действительно могут сохраняться и после операции обмена данными по протоколу HTTP.

202. Настройте браузер, чтобы он отображал предупреждение перед записью файлов cookie: запустите firefox, выберите Инструменты, Настройки, Приватность, в списке Сохранять cookie выберите Спрашивать каждый раз, нажмите ОК.

203. Откройте файл test_form_processor.php.

Эта страница получает значения переменных firstName и lastName в строке запроса, после чего эти значения выводятся на страницу в составе предложения: Мы признательны Вам,<?php echo $_GET['firstName']; ?> <?php echo $_GET['lastName']; ?>, за заполнение формы!

На этот раз, значения будут использоваться не для отображения на странице а для того, чтобы сохранить их в файле cookie на жестком диске пользователя.

204. В режиме Code поместите курсор в самое начало документа. Трижды нажмите Enter, чтобы добавить больше свободного места.

205. Введите код

<?php

setcookie('firstName', $_GET['firstName'], time() + (60*60*24));

setcookie('lastName', $_GET['lastName'], time() + (60*60*24));

?>

Создают две новые переменные firstName и lastName для файла cookie. В качестве значений новых переменных файла cookie указываются текущие значения переменных строки запроса. В коде задан срок действия переменной (один день).

Другими словами, значения новых переменных файла cookie задаются динамически. Это позволяет не только присвоить переменным жесткие статические значения, например, кошка или собака, но и создавать переменные, в которых будет храниться содержимое, полученное из других переменных. В данном случае переменным динамически присваивается содержимое переменных строки запроса.

206. В режиме Design создайте новый абзац ниже существующего и введите Check cookie. К слову cookie прикрепите ссылку на страницу test_form_processor_cookies.php. Сохраните страницу и загрузите ее на сервер.

207. Создайте новую динамическую страницу, соответствующую стандартам XHTML и сохраните ее как test_form_processor_cookies.php.

208. В режиме Design введите приветствие Привет, !

209. На панели Bindings щелкните на кнопке New Binding. Следует просто выбрать Cookie Variable и ввести имя firstName.

210. Добавить на панель Bindings переменную lastName.

211. Поместите курсор перед восклицательным знаком. На панели Bindings выделите переменную Cookie, firstName , после чего нажмите Insert. Таким же образом добавьте переменную lastName.

212. Сохраните страницу и загрузите ее на сервер.

213. Выберите файл test_form.php и нажмите F12. Заполните форму, нажмите Submit.  В окне Подтверждение сохранения cookie выберите показать подробности  — это firstName. Нажмите разрешить. Теперь запрос на lastName — нажмите разрешить.

214. Щелкните на ссылке Check cookie. Как и ожидалось, приложение работает. Несмотря на то, что данные вводятся на первой странице, они продолжают отображаться и на третьей. Данные берутся не из URL-адреса или тела запроса в виде значений переменных формы, а с жесткого диска.

215. Закройте браузер. Выберите файл test_form_ processor_cookies.php и нажмите F12. Файл test_form_processor.php ранее при проведении этого эксперимента не работал, поскольку после закрытия браузера данные из строки запросов пропадали. Если проводить такой же эксперимент с применением файлов cookie, то данные останутся, даже если закрыть браузер, поскольку они сохранены на жестком диске. Очевидно, что файлы cookie являются эффективным способом создания набора сохраняющихся данных, которые можно использовать на любых страницах сайта.