powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Взаимодействие клиента и сервера с помощью document.cookie
3 сообщений из 3, страница 1 из 1
Взаимодействие клиента и сервера с помощью document.cookie
    #34022216
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данный момент пишу сайт с возможностью размещения заказа. Все как обычно - есть страницы со списком товаров, посетитель добавляет товары в корзину и затем размещает заказ со страницы корзины. Напротив каждой позиции (товара) есть поле для ввода количества, которое нужно добавить к заказу. И вот тут начинается интересное. На событие onchange поля ввода вызывается код javaScript, который создает новую cookie с именем g#### и со значением равным кол-ву указанным в поле ввода (вместо #### подставляется уникальный id товара). Если посетитель укажет другое кол-во для того же товара, то "новая" cookie заменит "старую". Указание кол-ва для другого товара создаст еще одну cookie. И т.д.

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

Обработав cookie c именем g#### сервер отправит клиентскому браузеру ответ, чтобы он удалил данные cookie так, что двойной обработки не произойдет.

Плюс такого подхода в его широкой поддержке и, как мне кажется, относительной простоте. Браузеру нужно только поддерживать cookie и javaScript. Сервер же обрабатывает несколько запросов клиента пакетом.

Серверная часть пишется на ASP.NET и подобный механизм удобно реализуется путем создания своего HTTP модуля с обработчиком события BeginRequest. Но конкретный язык реализации здесь не важен. Мне хотелось бы узнать кто что думает насчет жиэнеспособности такого подхода? И, пожалуйста, не надо рассказывать про AJAX, здесь речь о другом.

Мне удалось выделить следующие возможные проблемы:


Состояние "гонки" между двумя запросами. К примеру, посетитель вводит для товара с id=123 кол-во 5 (создается cookie g123=5). Затем открывает ссылку с этого сайта в новом окне, содержимое которого из-за временных проблем со связью грузится медленно. Он возвращается в первое окно и меняет там кол-во для товара id=123 на 1 (создается cookie g123=1). Теперь он открывает ссылку в этом же окне (содержимое второго окна все еще грузится!) и оно загружается раньше чем содержимое второго окна. В корзину добавляется товар с количеством 1. В этот момент загружается содержимое второго окна, где была отправлена cookie g123=5 и в корзине теперь 5 позиций товара вместо 1.

Что с этим делать пока непонятно.


Возможность столкнуться с ограничением на максимальный объем/кол-во cookie. MSIE точно имеет подобные ограничения, зависящие от security zone в которую входит сайт. К сожалению не могу найти конкретные цифры. Кроме того надо найти аналогичную информацию, как минимум, для Opera и Firefox.


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


Отсутствие поддержки cookie/javascript. Этот пункт здесь просто для напоминания. Маловероятно что такое случится так как на сайте есть и другая функциональность зависящая от cookie/javascript так что данный случай мы игнорируем.



У кого какие мысли?
...
Рейтинг: 0 / 0
Взаимодействие клиента и сервера с помощью document.cookie
    #34025322
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже столкнулся с ограничением по пункту №2. Не получается создать больше 20 cookie. Это ограничение указано в RFC 2109. HTTP State Management Mechanism (см. раздел 6.3 Implementation Limits). Обойти в приницпе несложно, надо сохранять все в одну cookie в виде строки с разделителями. В том же RFC сказано что user-agent должен поддерживать cookie c длиной минимум 4 Кб, что для моих целей вполне достаточно.

Пробное приложение на основе этой идеи я уже написал и оно работает. Надо сейчас внести изменения с учетом максимального кол-ва cookie.
...
Рейтинг: 0 / 0
Взаимодействие клиента и сервера с помощью document.cookie
    #34033020
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с ограничением по макс. кол-ву cookie. Больше 20 штук создать нельзя. Изменил алгоритм так чтобы всегда использовалась только одна cookie.

И все еще жду ваших комментариев
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Взаимодействие клиента и сервера с помощью document.cookie
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]