Cookies.

И в завершение разговора о языке Perl поговорим о cookies (теневые посылки). Как известно, программное обеспечение сервера не может работать c файловой системой клиента, однако иногда возникает необходимость сохранять информацию на стороне клиента (например, пароль и логин).
Если сайт позволяет пользователю иметь индивидуальные настройки, то неправильно заставлять пользователя при каждом заходе устанавливать их заново. Поэтому клиентское программное обеспечение должно само предусмотреть стандартные механизмы для локального сохранения информации. Впервые такой механизм появился в Netscape 1.1

Cамо по себе cookie представляет собой пару имя=значение. Далее сервер при ответе посылает браузеру один или несколько cookie, которые связываются с данным сервером. И когда в следующий раз посещается этот же сервер, браузер передает ему вместе с запросом и сохраненнyю информацию. Все: пользователь освобожден от от повторного ввода данных при последующих посещениях этого сайта.

Cookie можно создать с помощью соответствующей функции cookie(). Она использует параметры:

Срок действия cookie:

Формат Значение
+Xs X секунд с настоящего момента
+Xm X минут с настоящего момента
+Xh X часов с настоящего момента
-Xd X дней назад. cookie удаляется
now настоящий момент
+Xm X месяцев с настоящего момента
+Xy X дней с настоящего момента

Или можно указать конкретную дату.

Следующий скрипт при первом входе пользователя спрашивает его имя, а при последующих уже приветствует его, обращаясь по этому имени. Комментировать  считаем излишним.

#!c:\perl\bin\perl.exe
use CGI;
$cgi_obj=new CGI;
$UserNameCookie=$cgi_obj->cookie('UserName');
$UserNameParam=$cgi_obj->param('UserName');
if (!$UserNameParam){$UserNameParam=$UserNameCookie};
if (!$UserNameParam){
print $cgi_obj->header();
print $cgi_obj->start_html()
print $cgi_obj->startform();
print $cgi_obj->startform(-method=>'GET');
print $cgi_obj->textfield(-name=>'Username', -size=>20);
print "\n";
print $cgi_obj->submit(-name=>'submit', -value=>'ok');
print $cgi_obj->endform;
print $cgi_obj->end_html;
}
else {
$cookie=$cgi_obj->cookie(-name=>'UserName', -value=>$UserNameParam,-expires=>'+30d');
print $cgi_obj->header(-cookie=>$cookie);
print $cgi_obj->start_html();
if (!$UserNameCookie){
print "hello, $UserNameParam";
}
else {
print "hello again, $UserNameParam";
}
print $cgi_obj->end_html;
}