Анимация
JavaScript
|
Главная Библионтека функция header в модуле CGI выполняет передачу пакета cookie броузеру. Это значит, что вы должны создать пакет, используя функцию cookie, а затем вызвать функцию header. Не следует иосьшать броузеру данные какого-либо другого тина до тех пор, пока не будут посланы файл cookie и заголовок. Чтобы создать файл cookie и отослать его броузеру, можно использовать CGI- программу, текст которой приведен ниже: f!/usr/bin/perl -и use CGI qw(:all); use strict; ny $ccxDkie=ccxDkie(-nane => Sale, -value cookie не пкнает сошени) ; print header (-cookie => $cookie}; После выполнения приведенного фрагмента программы файл cookie с именем Sample будет установлен в броузере. Новоиспеченный файл cookie будет содержать информацию Этот cookie не включает сообщений. В действительности не исключено, что cookie окажется не установленным. Броузеры мог отказаться принять cookie, и для этого есть немало причин (см. раздел "Проблемы с файлами cookie" этого занятия). Для считывания пакетов cookie из броузера Офамму используется та же функция cookie. Вызванная без аргументов (как показано в следующих примерах), она возвращает список имен всех файлов cookie, которые броузер передал вашему серверу: gcookie list=cookie (); # Возашает иEка 1зс€х фав ccoe -ипя~ * Еоз15ашаЕт значение для конфетного фбйка cooe $cooe value=:ooe{$cooe nane); По умолчанию после установки в броузере файл cookie возвращается в любую CGI- программу, которая размещается на том же самом сервере, т.е. только тот сервер, который установил пакет cookie, может осуществлять их выборку. Чтобы просмотреть содержимое созданного выше файла cookie Sample, можно использовать другую CGI-программу: !/usr/bin/perl -wT use CGI qw(;all)j use strict; print Выводит стандартный заголовок prin Учение cookie Sample: SampXe), "<P>"; В предыдущем фрагменте кода функция cookie была вызвана с одним аргументом - именем файла cookie, который нас интересует. Это значение считывается и выводится для просмотра. Пакет cookie должен быть возвращен броузером до заверщения его работы. После но-вторного запуска от нащего cookie Sample не останется и следа. Для создания более "устойчивых" пакетов cookie обратитесь к разделу "Сохранение файлов cookie" этого занятия. Большинство броузеров обладают возможностью оповещения факта установки файлов cookie. В броузере Netscape соответствующие опции можно найти в разделе Preferences вкладки Advanced. А в броузере Internet Explorer вам придется для этого открыть вкладку Дополнительно (Advanced) диалогового окна Свойства обозревателя {Internet Options) и отыскать переключатель, управляющий режимом установки файлов cookie. Пример: использование файлов cookie В качестве примера создадим небольшую программу, с которой можно будет менять в Web-броузере цвета просматриваемой в данный момент страницы. На самом деле эта программа выполняет сразу несколько функций, как описано ниже. 1. Проверяет наличие изменения в цвете фона, установленного по умолчанию, путем проверки параметров программы. 2 Устанавливает файл cookie в броузере с использованием нужного цвета фона. 3 Устанавливает цвет фона страницы в соответствии с нужным цветом. 4 Отображаем орму, позволяющую выбрать цвет. Программа изменения цвета Web-страницы представлена в листинге 21.1. Ли 21.1. Пой в1 згр ColorChanger 1l: ♦!/usr/bin/perl -w 2: ujse strict; 3: иаэаЗ(у(:а11}; 4: иж CGI::Carp qw(fatalsToBrowser); 5: By($requested color, $oldaDlcr, $color cookie) = ("•,""); 6: Sold color="blue"; I Сгавдартньй ьдает 7: I ЕЬш ли запрос на установку нового прета? 8: if (defined param{color)) { 9; $requested color=param(color); 10: } 11: I Каким бьл стй цвет? 12: if {defined caakie(bgcalar)) { 13: $ald calar=caakie(bgcalar); 14: } 15: if ($requested color and ($old color ne $requested color)) { 16: i Установка caakie в броузере 17: $calar caakicaakie(-name => bgcalar, 18: -value => $recjiested color) ; 19: print header(-cookie => $color cookie); 20: } else { 21: i Ничего не изменено, нет нугщ>1 в установке cookie 22: $requested color=Sold color; 23: print header; 24: } 25: print«ElID OF HTML; 26: <HTML> 27: <eEAD> 28: <ТтЕ>Установка цвета фона</Т1ТЬЕ> 29: </ВЕЮ> 30: <BODY BGCOLOR="Srequestedcolor"> 31: <FORM> 32 : <SELECT NAME="color"> 33: <OPTION value=red>KpacHbifi 34: <0РТ1ОЯ value=blue>CKHHE 35: <OPTIOH уа1ие=уе11оу>Жептый 36: <0PTION value=white >Бепый 37: </SELECT> 38: <INPUT TYPE=SUBMIT УАЬиЕ="Установка цвета"> 39: </FORM> 40: </BODY> 41: </HTHL> 42 : END OF HTML Проведем анализ программы. • Строки 7-10. Если эта CGI-профамма вызывается для обработки данных HTML-формы, функция рагат( "color") возвращает значение выбранного цвета. В противном случае значение переменной $requested color остается неопределенным. • Строки 12-14. В этих строках программы проверяется факт существования файла cookie с именем bgcolor (его ведь может и не быть!). Если файл действительно существует, его содержимое (значение цвета фона экрана, сохраненное в файле cookie в последний раз) запоминается в переменной $old color. • Строки 15-19. Если цвет изменен (содержимое файла сооКе не совпадает с новым значением), нужно установить в броузере новый файл cookie с обновленным значением цвета. • Строк24. В противном случае выводится только заголовок, без cookie. Учтите, что броузер будет сохранять предыдущий файл cookie неограниченно долго. • Строки 25-42. Здесь создается обычная форма HTML. Однако обратите внимание на строку 30 - именно в ней выполняется изменение цвета HTML-страницы. Еще один пример: просмотр файлов cookie Удивительно короткую программу просмотра файлов cookie, приведенную в листинге 21.2, можно рассматривать как вспомогательное средство при отладке CGI-профамм, работающих с пакетами cookie. Эта программа выводит список всех пакетов cookie, хра-ним1х в Web-броузере, которые считаны с одного и того же Web-сервера. Програ досмотра cookie 1: t!/usr/bin/perl -w 3: v£e strict; 4: СИ q(:all); 6: prdi adE{); 7: 8: print "Список файлов cookie, которою мэжно просмотреть;<P>"; 10: foreach riF $cookie (cookieO) { 11: print "ИУН cookie: $cookie <BR>"; 12: print qq{3Ha4eHHe cookie: "), cookie($cookie), qq{"<P><HR>}; 13; } . 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 [ 101 ] 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |