Форум / CGI-программирование / Тема

+ Список Разделы Темы Новая тема Ответить Ответ админа Удалить Открыть/Закрыть Чат Барахолка Каталог
Реклама

Cookies в CGI-Perl

Статистика темы

Всего ответов в теме: 8
Просмотров темы: 3332

Hron
  Fri Jun 27 12:58:38 2003
Как работать с cookies через cgi-скрипт? Например: есть гостевуха, в форме которой нужно запомнить имя юзера, и ,если он уже однажды заполнял эту форму, вызывать данные.
Wowik
http://designerweb.dax.ru/prog/cgi/cookies.htm
Fri Jun 27 13:02:55 2003
Работа с cookies на Perl
Cookies - небольшие файлы сохраняемые на машине клиента, позволяющие хранить персональную информацию для каждого пользователя на стороне клиента. В Perl для работы с Cookies используется модуль CGI::Cookie
С помощью Cookies Вы можете сохранять на стороне клиента информацию ввиде ключ-занчение. В какой-то степени Cookies можно сравнивать с передачей параметров запроса методом POST, но передаваемые значения в случае Cookies будут храниться на компьютере пользователя, что позволяет идентифицировать любого клиента, зашедшего на Ваш сайт второй или более раз. В основном Cookies применяются для аутентификации пользователя ресурса. Т.е. в Cookies можно хранить имя пользователя, пароль, или идентификатор сессии пользователя. Таким образом, зарегистрированный на вашем сайте пользователь может входить в свою область идентификации не вводя каждый раз пароль. Единтефикация пользователя, конечно, не единственное применение Cookies. Уважаемый читатель может пользоваться Cookies для каких-то своих, ему ведомых целей.
Итак, как можно (и нужно) работать с Cookies на Perl?
Во-первых, для работы необходимо подключить модуль:

use CGI::Cookie;
Этот модуль позволит Вам получить доступ для манипуляций с Cookies.
Вторым шагом может служить запись Cookies:
Сначала надо создать Cookie:

$c = new CGI::Cookie(-name => 'SOMENAME',
-value => 'SOMEVALUE',
-expires => '+3M',
-domain => '.someserver.com',
-path => '/cgi-bin'
-secure => 1
);
Ключи -name и -value передают пользователю данные которые Вы хотите записать пользователю в формате Ключ - Значение соответственно.
Ключ -expires указывает время жизни Cookie на машине пользователя. В данном примере время жизни 3 месяца. Если время жизни устанавливается в ноль то Cookie существует только тогда, когда запущен браузер и не записывается на диск. После закрытия браузера такой Cookie аннулируется.
Ключ -domain указывает полное или частичное имя сервера, для которого Cookie имеет силу. Браузер возвратит Cookie любому хосту, который соответствует полному или частичному имени указанному в этом ключе. На-пример, если Вы укажете имя домена .somesrver.com, то Cookie будет возвращено любому поддомену этого домена, будь то www.somesrver.com или vasya.somesrver.com. Если же этот ключ не определен, то будет установлено имя хоста по умолчанию, с которого был записан Cookie.
Ключ -path служит для указания пути к скриптам которые используют этот Cookie. Если Вы указываете путь /cgi-bin, то все скрипты в этом каталоге и в его подкаталогах получат Cookie, но скрипты расположенные в других каталогах, не являющихся подкаталогами /cgi-bin этот Cookie не получат.
Если установлен ключ -secure, то Ваш Cookie будет передаваться только по протоколу SSL. По обычному HTTP протоколу он передаваться не будет.
Дальше нобходимо передать созданный Cookie браузеру пользователя:

print header(-cookie=>$c);
Теперь как получить Cookie...
%cookies = fetch CGI::Cookie;
В результате этой операции мы получим хэш со значениями переданного от пользователя Cookie. Далее мы можем манипулировать полученными значениями

$SOMECOOKIE = $cookies{'SOMENAME'}->value;
После этой операции переменная $SOMECOOKIE будет иметь значение 'SOMEVALUE'.
Click
Thu Jul 3 17:35:41 2003
Re: Cookies в CGI-Perl
Модуля CGI::Cookie нет на большинстве бесплатных хостингов, так что писать в cookies можно и через простой javascript в форме.
Wowik
Mon Jul 7 14:14:36 2003
Re: Cookies в CGI-Perl
Ну писать-то можно, а читать CGI-скриптом как?
Hron
Sat Jul 12 14:16:23 2003
Re: Cookies в CGI-Perl
У меня действительно модуль CGI::Cookie не поддерживается:(
Click
МоскваSun Jul 13 12:23:54 2003
Re: Cookies в CGI-Perl
А зачем читать в CGI, если требуется всего-лишь заполнить форму гостевой, например именем и email? Это может сделать Java-скрипт, генерируемый CGI-скриптом вместе с формой.
Hron
Fri Jul 18 12:07:19 2003
Re: Cookies в CGI-Perl
А как с cookies через Яву работать?
Click
МоскваMon Jul 28 15:17:28 2003
Re: Cookies в CGI-Perl
Данные в cookie содержат строки следующего содержания:
ИмяПараметра=ЗначениеПараметра;expires=Строка_времени_в_GMT(до указанной даты хранится эта строка);domain=Домен(URL)СоздавшийЗапись;secure=false|true(любое|безопасное http-соединение)
В JavaScript чтение-запись осуществляется коллекцией: document.cookie например запишем: document.cookie="UserName=Вася", создастся запись в cookie для домена, где лежит этот скрипт (если запись уже существует, то будет обновлена). Поскольку не указано время жизни, то запись будет существовать до закрытия браузера.
Допустим мы хотим хранить запись 1 месяц. Тогда запись должна осуществлятся следующим скриптом:
var expdate= new Date();
var monthFromNow= expdate.getTime()+(30*24*60*60*1000); // 1000-потому что значение в миллисекундах
expdate.setTime(monthFromNow);
document.cookie="UserName=Вася; expires=" + expdate.toGMTString();
Теперь запись текущего домена будет храниться месяц на компе пользователя. Если хотим удалить ее раньше, то должны указать уже прошедьшую дату: "expires=Thu, 01-Jan-70 00:00:01 GMT". Для чтения записи используется тот же метод:
var StrCookie= document.cookie;
В переменной StrCookie появится запись (если мы ее сделали так как выше): StrCookie="UserName=Вася; expires=КакаяТоДата; domain=Какой-тоДомен". Значит просто обрабатываем эту строку и получаем нужное значение. Если записи соответствующего домена нет, то StrCookie=null.
Напоследок напомню, что записи должны производится слитно, без пробелов и других символов разметки. Чтобы предотвратить ошибки при записи пользуйся встроенной функцией escape("Строка"), а при чтении unescape("Строка"). То есть если юзер введет на запрос UserName=Вася Пупкин, то escape("Вася Пупкин")="Вася%20Пупкин".
Разбор
Tue Apr 5 13:39:32 2005
Re: Cookies в CGI-Perl
Куки - это всего-лишь специальный заголовок, наподобии Content-type: он называется Cookie: вот и все. Так-что послать и приниять куки можно любым скриптом, просто нужно уметь работать с заголовками HTTP.
Реклама
Карта сайта Created by Isety corp. (2005), Version: 1.0.2, Revision: 19.01.2007