|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| В данный момент пишу сайт с возможностью размещения заказа. Все как обычно - есть страницы со списком товаров, посетитель добавляет товары в корзину и затем размещает заказ со страницы корзины. Напротив каждой позиции (товара) есть поле для ввода количества, которое нужно добавить к заказу. И вот тут начинается интересное. На событие 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 так что данный случай мы игнорируем.
Итак, у кого какие мысли?
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833,
Visits: 16 863
|
|
1) Усли уж такое и будети, то крайне редко. На это вполне можно закрыть глаза. 2) Опять же - врятли. Это должен быть какой-то супер-покупатель. Килобайта 4 у тебя точно есть. 3) Думаю, об этом даже и не стоит упоминать. 4) Опять же - очень мала вероятность.А общем и целом я считаю это ъорошим подходом. Думаю, его стОит исопльзовать. Минусы слишком незначительные.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Спасибо. Возможность возникновения гонки все-таки считаю весьма вероятной. Пока думаю как это можно победить.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Уже столкнулся с ограничением по пункту №2. Не получается создать больше 20 cookie. Это ограничение указано в RFC 2109. HTTP State Management Mechanism (см. раздел 6.3 Implementation Limits). Обойти в приницпе несложно, надо сохранять id товаров в одну cookie в виде строки с разделителями. В том же RFC сказано что user-agent должен поддерживать cookie c длиной минимум 4 Кб, что для моих целей вполне достаточно. Пробное приложение на основе этой идеи я уже написал и оно работает. Надо сейчас внести изменения с учетом максимального кол-ва cookie.
|
|
|
|