Январь 22, 2006

Взаимодействие нескольких форм (окончание)

Cookies.

Все предыдущие примеры ничего не требовали от клиента. Механизм использования cookies, основывается на изобретенной Netscape технологии хранения данных на стороне клиента.

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

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

Программа, желающая сохранить cookie у клиента должна начинаться примерно так:

#!/usr/local/bin/perl

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
local($key, $value) = split(/=/, $buffer);
print "Content-type: text/html\n";
print "Set-Cookie: $key=$value; expires=Sat,
26-Aug-95 15:45:30 GMT;
path=/; domain=webclub.ru\n\n";
...
exit(0);

Можно в одном заголовке указывать несколько строк установки cookie:

Set-Cookie: book_id=123156; path=/shop;
domain=webclub.ru
Set-Cookie: city_id=434; path=/shop;
domain=webclub.ru

Сохраненные данные сценарий может прочитать в переменной окружения HTTP_COOKIE. Код программы выглядит примерно так:

@cookie_pairs = split(/;\s/, $ENV{'HTTP_COOKIE'});
foreach $pair (@cookie_pairs) {
($key, $pair) = split(/=/, $pair);
$key =~ tr/+/ /;
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",
hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",
hex($1))/eg;
if (defined($FORM_DATA{$key}) {
# Вам надо решить, что делать если
есть cookie и данные
# формы с одним и тем же ключом.
} else {
$FORM_DATA{$key} = $value;
}
}

Одной из проблем при использовании данной технологии для создания крупных систем является наличие ограничений по размеру одного cookie - 4Kb, количеству cookies от одного сервера - 20, и общему количеству cookies для каждого пользователя - 300. Вы всегда должны помнить о них при создании крупных систем.

Заключение

Независимо от того, какой механизм Вы выберите, Вы должны хорошо продумать всю систему, определить объем передаваемых данных и решить, необходимы ли Вам временные файлы или база данных. Даже если информация о товарах хранится в базе данных, это еще не значит, что и информацию о пользователе надо хранить там-же.

Если Вам все-же необходимо использовать временные файлы или базу данных, для хранения информации о текущем состоянии пользователя, не забывайте, что нет способа отследить уход пользователя из системы где-либо по середине пути. Поэтому на Вас ложится задача удаления устаревших данных, т.е. удаления временных файлов или записей в таблицах. Способ определения, какие данные можно считать устаревшими, зависит от каждой конкретной задачи.

Часть 3

Разместил:

Источник: CodeNet

Ваш комментарий

Обсудить на форуме?

Подумайте, прежде чем высказать своё мнение. Постарайтесь сделать свой комментарий полезным для других. Не используйте ненормативную лексику. Пользователи, пишущие "от нечего делать" бессмысленные наборы символов, будут блокироваться навсегда.