Клиентские хранилища. Технологии будущего. Оптимизация структуры веб-страниц
userData behavior
Flash Local Shared Object
WHATWG DB Backend (openDatabase)
globalStorage и localStorage
Google Gears
Библиотеки для работы с клиентскими хранилищами
Резюме
Первопроходцем на ниве сохранения данных на клиенте можно назвать компанию Netscape, сотрудник которой придумал «cookie» - сохраняемые на компьютере пользователя, в виде ключ-значение, данные небольшого объёма. Объём действительно небольшой, различные браузеры имеют разные ограничения, но даже в лучшем случае их не может быть больше 50, размером не более 4КБ каждая. Некоторые версии Internet Explorer разрешают устанавливать не более 20 cookie, общим объёмом не более 4КБ (в IE8 - 50 значений, общим объёмом 10КБ).
Другой недостаток cookie - при каждом запросе все cookie передаются на сервер, что иногда сильно увеличивает объём трафика и снижает отзывчивость приложения. С передачей cookie на сервер связано другое ограничение их объёма, дело в том, что многие сервера имеют различные лимит на размер заголовка запроса, при превышении которого сервер откажется обработать запрос.
Например, у популярного веб-сервера Apache есть ограничение на длину каждой строки запроса (директива LimitRequestLine), по умолчанию оно составляет 8КБ. Откуда следует, что ограничение сверху на размер cookie (в том худшем случае, если cookie целиком будет состоять из URL-encoded символов) - 2,6КБ. Конечно, если вы имеете доступ к настройке вашего сервера, то это ограничение можно снять.
Но у cookie есть важное достоинство - к ним можно было осуществлять доступ из клиентских скриптовых языков.
API cookie, если это так можно назвать, очень примитивное. Поскольку использование cookie в браузере можно запрещать, приложению сначала желательно проверить значение свойства navigator.cookieEnabled. Если значение его значение - истина, то можно прочитать значение document.cookie.
Значение этого свойства представляет собой строку, где записаны все cookie, объединённые через точку с запятой и пробел. Ключ и значение каждого cookie объединены через знак «равно», впрочем, из этого правила бывают исключения: авторам известны случаи, когда Internet Explorer записывал cookie с пустым значением без «равно».
У cookie, помимо имени есть несколько атрибутов (перечислены поддерживаемые всеми браузерами):
expires - время хранения cookie, если этот атрибут не указан, то cookie удалится после закрытия окна браузера, где значение этого cookie было создано. Чтобы удалить cookie, нужно поставить в это поле любую дату прошлого.
• domain - домен, для которого создаётся данное значение, остальные домены могут иметь собственные cookie с тем же именем, если параметр не задан, используется текущее имя домена. Допустимые значения - домен, с которого загружен документ или поддомен этого домена.
• path - путь, для которого созда?тся значение, по умолчанию используется путь текущей страницы. Путь тут трактуется как директория - значение будет существовать и для всех вложенных путей.
• secure - флаг, наличие которого означает, что данное значение cookie будет передаваться только по HTTPS.
Для того чтобы создать новое значение cookie из скриптового клиентского языка, нужно записать в document.cookie строку вида:
key=value; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.example.net
Как было сказано выше, все поля, кроме пары ключ-значение, можно опустить. Точка перед доменом в параметре «domain» означает, что это значение будет установлено и для всех доменов выше уровнем. При записи нового значения cookie, его значение в указанном домене изменится.
Идея cookie получила дальнейшее развитие за прошедшие годы, стандарт расширился, но поскольку управление этими расширениями из клиентских скриптовых языков недоступно, рассматривать их мы не будем.