Установка cookies
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sub on_set_cookies { my $self = shift; my $query = $self->query(); my $auth_cookie = $query->cookie( # подготавливаем cookie -name=>'alisa', -value=>'pass', -expires=>'+1h', -path=>'/cgi', -domain=>'.aninatalie.ru', ); $self->header_props(-cookie=>[$auth_cookie]); # устанавливаем у клиента return $self->tt_process('template2.tt'); } |
Получение информации из cookies
|
1 2 3 4 5 6 7 8 9 10 |
sub on_set_cookies { my $self = shift; my $query = $self->query(); my $auth_cookie = $query->cookie('alisa'); # Значение переменной $auth_cookie будет равно 'pass'. # Т.е. мы получим только значение -value . ... return $self->tt_process('template2.tt'); } |
Обновление данных cookies
Чтобы обновить значение cookie, надо просто записать новые данные поверх существующих. Для этого указываем -name нужной cookie, и задаем новые параметры для нее.
Удаление cookies
Удалить cookie тоже просто - обновляем значение нужной сookie и -expires присваиваем отрицательное значение, например, -1d. Браузер примет обновление сookie и, увидев отрицательное время, посчитает, что он давным давно уже должен был удалить сookie (в данном случае, еще вчера). И удалит.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sub on_set_cookies { my $self = shift; my $query = $self->query(); my $auth_cookie = $query->cookie( -name=>'alisa', -value=>'pass', -expires=>'-1h', -path=>'/cgi', -domain=>'.aninatalie.ru', ); $self->header_props(-cookie=>[$auth_cookie]); return $self->tt_process('template2.tt'); } |
Памятка
Что такое cookies
Cookie является решением одной из наследственных проблем HTTP протокола (HyperText Transfer Protocol). Проблема заключается в непостоянстве соединения между клиентом и сервером.
Используя cookie, можно эмулировать сессию по HTTP протоколу. Коротко принцип эмуляции сессии таков: на первом запросе выдается соотвествующее значение cookie, а при каждом последующем запросе это значение читается из переменной окружения HTTP_COOKIE и соответствующим образом обрабатывается.
Cookie - это небольшая порция текстовой информации, которую сервер передает браузеру. Браузер будет хранить эту информацию и передавать ее серверу с каждым запросом как часть HTTP заголовка.
Некоторые cookie могут храниться только в течение одной сессии, они удаляются после закрытия браузера. Другие, установленные на определенный период времени, записываются в файл(ы).
Формат и синтаксис cookie
Сookie является частью HTTP заголовка. Полное описание поля Set-Cookie HTTP заголовка:
|
1 |
Set-Cookie: name=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure |
Минимальное описание поля Set-Cookie HTTP заголовка:
|
1 |
Set-Cookie: name=VALUE; |
- name=VALUE - строка символов, исключая перевод строки, запятые и пробелы. NAME-имя
cookie, VALUE - значение. Не допускается использование двоеточия, запятой и пробела. - expires=DATE - время хранения cookie, т.е. вместо DATE должна стоять дата в формате
"expires=Monday, DD-Mon-YYYY HH:MM:SS GMT", после которой истекает время хранения cookie. Если
этот атрибут не указан, то cookie хранится в течение одного сеанса, до закрытия броузера. - domain=DOMAIN_NAME - домен, для которого значение cookie действительно. Например,
"domain=cit-forum.com".
Если этот атрибут опущен, то по умолчанию используется доменное имя сервера, на котором было
задано значение cookie. - path=PATH - атрибут устанавливает подмножество документов, для которых действительно
значение cookie. Для того, чтобы cookie отсылались
при каждом запросе к серверу, необходимо указать корневой каталог сервера, например, "path=/".
Если этот атрибут не указан, то значение cookie распространяется только на документы в той же
директории, что и документ, в котором было установлено значение cookie. - secure - если стоит этот маркер, то информация cookie пересылается только через
HTTPS (HTTP с использованием SSL - Secure Socket Level), в защищенном режиме. Если этот
маркер не указан, то информация пересылается обычным способом.
Полезные ссылки
http://www.redantigua.com/cookies.html Cookies with CGI::Application
http://search.cpan.org/~markstos/CGI-Application-4.31/lib/CGI/Application.pm
http://search.cpan.org/~lds/CGI.pm-3.49/lib/CGI.pm#HTTP_COOKIES