Анимация
JavaScript


Главная  Библионтека 

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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 [ 224 ] 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

19.9. Отладка на уровне HTTP 689

$client->autoflush; RESPONSE: while (<STDIN>) {

last RESPONSE if $ eq •,\n"; last CONNECTION if $ eq "..\n"; print Sclient $ ;

print "\nE0F\n";

>

print "CLOSE: ", $client->reason, "\n";

$client->close;

undef Sclient;

Комментарий

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

Фиктивный сервер лучще всего запускать на том же компьютере, что и настоящий. При этом броузер будет отправлять ему все cookies, предназначенные для этого домена. Вместо того чтобы направлять броузер по обычному URL:

http: somewhere.com/cgi-bin/whatever

воспользуйтесь альтернативным портом, указанным в конструкторе new. При использовании альтернативного порта необязательно быть привилегированным пользователем, чтобы запустить сервер.

http: somewhere.com:8989/cgi-bin/whatever

Если вы рещите, что клиент ведет себя правильно, и захотите проверить сервер, проще всего воспользоваться программой telnet для непосредственного общения с удаленным сервером.

% telnet www.perl com 80

GET /bogotic HTTP/1.0

<blank line here>

HTTP/1.1 404 File Not Found

Date: Tue, 21 Apr 1998 11:25:43 GMT

Server: Apache/1.2.4

Connection: close

Content-Type: text/html

<HTML><HEAD>

<TITLE>404 File Not Found<ДITLE>

</HEAD><B0DY>

<H1>File Not Found</H1>

The requested URL /bogotic was not found on this server.<P> </B0DY></HTML>



19.10. Работа с cookies

Проблема

Вы хотите получить или создать cookie для хранения параметров сеанса или настроек пользователя.

Решение .

в модуле CGI.pm получение существующей cookie выполняется так:

$preference value = cookieC preference name");

Cookie создаются следующим образом:

$packed cookie = cookie( -NAME => "preference name",

-VALUE => "whatever youd like", -EXPIRES => "+2y");

Если в вашей системе установлены модули LWP, вы сможете использовать синоним GET для программы Iwprequest. При этом будут отслеживаться все цепочки перенаправлений, что может пролить свет на вашу проблему. Например:

% GET -esuSU http: Tnox.perl.coTn/perl/bogotic

GET http: language.perl.coni/bogotic Host: mox.perl.com User-Agent: Iwp-request/1.32

GET http: mox.perl.com/perl/bogotic -> 302 Moved Temporarily GET http; ww(.perl.com/perl/bogotic -> 302 Moved Temporarily GET http: language.perl.com/bogotic -> 404 File Not Found Connection: close

Date: Tue, 21 Apr 1998 11:29:03 GMT

Server: Apache/1.2.4

Content-Type: text/html

Client-Date: Tue, 21 Apr 1998 12:29:01 GMT

Client-Peer: 208.201.239.47:80

Title: Broken perl.com Links

<HTML>

<HEAD><TITLE>An Error 0ссиггеЬ<Д1ТЕЕ></НЕА0> <BODY>

<H1>An Error Occurred</h1> 404 File Not Found </BODY> </HTML>

t> Смотри также-

Документация по стандартному модулю CGI; рецепт 14.10.



19.10. Работа с cookies 691

Чтобы сохранить cookie в клиентском броузере, необходимо включить ее в заголовок HTTP (вероятно, с помощью функций header или redirect):

print header(-COOKIE => $packed cookie),

Комментарий

Cookies используются для хранения информации о клиентском броузере. Если вы работаете с Netscape в UNIX, просмотрите файл -/.netscape/cookies, хотя в нем содержатся не все cookies, а лищь те, которые присутствовали на момент последнего выхода из броузера. Cookies можно рассматривать как пользовательские настройки уровня приложения или как средство упростить обмен данными. Преимущества cookies заключаются в том, что они могут совместно использоваться несколькими разными программами и даже сохраняются между вызовами броузера.

Однако cookies также применяются и для сомнительных щтучек тина анализа трафика. Нервные пользователи начинают гадать, кто и зачем собирает их личные данные. Кроме того, cookies привязаны к одному компьютеру. Если вы работаете с броузером у себя дома или в другом офисе, в нем не будет cookies из броузера, находящегося у вас на работе. По этой причине не следует ожидать, что каждый броузер примет cookies, которые вы ему даете. А если этого покажется недостаточно, броузеры могут уничтожать cookies по своему усмотрению. Ниже приведена выдержка из чернового документа «Механизм управления состоянием НТТР» (HTTP State Management Mechanism*) по адресу http: portal.research.bell-labs.com/ ~dmk/cookie -2.81 -3.1.txt.

«Поскольку пользовательские агенты обладают ограниченным пространством для хранения cookies, они могут удалять старые cookies, чтобы освободить место для новых - например, используя алгоритм удаления по сроку последнего использования в сочетании с ограничением максимального числа cookies, создаваемых каждым сервером.»

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

В примере 19.7 приведена законченная программа, которая запоминает последний выбор пользователя.

Пример 19.7. ic cookies

#/usr/bin/perl -w

# ic cookies - пример сценария CGI с использованием cookie use CGI qw( standard);

use strict;

my Scookname = "favorite ice cream ;

my Sfavorite = param("flavor"),

my Stasty = cookie($cookname) "mint",

unless (Sfavorite) {

print headerO, start html(Ice Cookies"), h1("Hello Ice Cream), hr(), start form().



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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 [ 224 ] 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242