Статьи

Переменные сеанса без файлов cookie в JavaScript

(JavaScript) Cookie Monster Печенье может быть вкусным деликатесом, но оно может оставить неприятный вкус, если вы не приготовите его правильно! Файлы cookie могут быть заблокированы пользователем, объем хранилища ограничен четырьмя файлами cookie размером 20 КБ на домен, могут использоваться только строки, пути могут вызвать путаницу, а данные обычно передаются в виде простого текста в заголовке HTTP. Зачастую cookie-файлы могут быть излишними для приложений, работающих на стороне клиента, которым необходимо сохранять временные данные о состоянии.

К счастью, есть решение, которое позволяет хранить данные JavaScript в браузере. Данные сохраняются между загрузками страниц, они сохраняются на странице назад / следующих событиях (даже вне домена), им не требуются плагины или автономные хранилища, они будут хранить несколько мегабайт информации, это никогда не происходит передается на сервер и работает в любом браузере. Как ни странно, он работает, используя свойство window.name (или window.top.name, если вы используете несколько фреймов).

Разработчики редко устанавливают свойство window.name. Как правило, это требуется только при работе с фреймами или всплывающими окнами. Даже если бы я надеялся, что вы этого не делаете, вам обычно не нужно определять имя для стартового окна приложения. Хотя свойство name все еще является строкой, оно может содержать несколько мегабайт данных. Некоторые версии Opera ограничивают его до 2 МБ, но большинство браузеров предлагают 10 МБ или более.

Это легко попробовать для себя. Вставьте следующий код JavaScript на страницу вашего сайта:


window.name = "This message will survive between page loads.";

Теперь добавьте следующий код на любую другую страницу:

 
alert(window.name);

Перейдите с первой страницы на вторую, и вы увидите, что данные сообщения сохранены.

Как обычно, есть ряд предостережений:

  1. Свойство window.name может быть проанализировано и изменено, если вы перейдете на страницу на другом веб-сайте. Это легко предотвратить, если не предоставить внешние ссылки в главном окне вашего приложения. Однако, чтобы быть в безопасности, не используйте window.name для хранения защищенных данных (вряд ли это будет серьезной проблемой для временного хранилища данных только на стороне клиента).
  2. window.name может хранить только строки. Что если нам нужно сохранить другие типы данных или даже сложные объекты? Ответом является сериализация, и, к счастью, мы уже разработали кросс-браузерный код для генерации строк JSON из любого объекта JavaScript .

См. Также: Как написать библиотеку сессий без файлов cookie для JavaScript .