Работа с cookies и CGI::Application
Установка cookies
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
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 (в данном случае, еще вчера). И удалит.
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 заголовка:Set-Cookie: name=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secureМинимальное описание поля Set-Cookie HTTP заголовка:
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), в защищенном режиме. Если этот маркер не указан, то информация пересылается обычным способом.
Комментировать