Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.09.2006, 14:11
|
|||
|---|---|---|---|
Взаимодействие клиента и сервера с помощью document.cookie |
|||
|
#18+
В данный момент пишу сайт с возможностью размещения заказа. Все как обычно - есть страницы со списком товаров, посетитель добавляет товары в корзину и затем размещает заказ со страницы корзины. Напротив каждой позиции (товара) есть поле для ввода количества, которое нужно добавить к заказу. И вот тут начинается интересное. На событие 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 так что данный случай мы игнорируем. У кого какие мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.10.2006, 11:01
|
|||
|---|---|---|---|
Взаимодействие клиента и сервера с помощью document.cookie |
|||
|
#18+
Уже столкнулся с ограничением по пункту №2. Не получается создать больше 20 cookie. Это ограничение указано в RFC 2109. HTTP State Management Mechanism (см. раздел 6.3 Implementation Limits). Обойти в приницпе несложно, надо сохранять все в одну cookie в виде строки с разделителями. В том же RFC сказано что user-agent должен поддерживать cookie c длиной минимум 4 Кб, что для моих целей вполне достаточно. Пробное приложение на основе этой идеи я уже написал и оно работает. Надо сейчас внести изменения с учетом максимального кол-ва cookie. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.10.2006, 19:18
|
|||
|---|---|---|---|
Взаимодействие клиента и сервера с помощью document.cookie |
|||
|
#18+
Столкнулся с ограничением по макс. кол-ву cookie. Больше 20 штук создать нельзя. Изменил алгоритм так чтобы всегда использовалась только одна cookie. И все еще жду ваших комментариев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=18&tablet=1&tid=1388914]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
91ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 451ms |

| 0 / 0 |
