printf("Set-cookie: cook=%s; "
"expires=Friday,31-Dec-01 23:59:59 GMT", Buf);
// Òåïåðü ýòî — íîâîå çíà÷åíèå Cookie
Cook=Buf;
}
// âûâîäèì ñòðàíèöó ñ ôîðìîé
printf("Content-type: text/html\n\n");
printf("<html><body>\n");
// åñëè èìÿ çàäàíî (íå ïóñòàÿ ñòðîêà), ïðèâåòñòâèå
if(strcmp(Cook, ""))
printf("<h1>Ïðèâåò, %s!</h1>\n",Cook);
// ïðîäîëæàåì
printf("<form action=/cgi-bin/script.cgi method=get>\n");
printf("Âàøå èìÿ: ");
printf("<input type=text name=name value=’%s’>\n",Cook);
printf("<input type=submit value=’Îòïðàâèòü’>\n");
printf("</form>\n");
printf("</body></html>");
}
Теперь при первом заходе на этот URL пользователь получит форму с пустым полем для ввода имени. Если он что-то туда напечатает и нажмет кнопку отправки, его информация запомнится браузером. Итак, посетив в любое время до 31 декабря 2001 года этот же URL, он увидит то, что напечатал давным-давно в текстовом поле. И, что самое важное, — его информацию "увидит" также и сценарий. Кстати, у злоумышленника нет никаких шансов получить значение Cookie посетителя, потому что оно хранится у него на компьютере, а не на сервере.
И опять я намекаю на то, что использование Си и на этот раз довольно затруднительно. Неудобно URL-декодировать и кодировать при установке Cookies, накладно разбирать их на части, да и вообще наша простая программа получилась слишком длинной. Не правда ли, приятно будет обнаружить, что в PHP все это реализовано автоматически: для работы с Cookies существует всего одна универсальная функция SetCookie(), а получение Cookies от браузера вообще не вызовет никаких проблем, потому что оно ничем не отличается от получения данных формы. Это логично. В самом деле, какая нам разница, какие данные пришли из формы, а какие — из Cookies? С точки зрения сценария — все равно...
Но не буду забегать вперед. Займемся пока теорией авторизации.