Переменные сессий без применения cookies

Такой инструмент хранения данных как cookies зачастую избегают из-за многих проблем связанных с их использованием – ограниченный размер хранимых данных (4 х 20Kb на один домен), хранить можно только строки, и, кроме того все эти данные добавляются в заголовки запросов браузера, что не способствует производительной работе сайта. Решение этой проблеме я нашел вчера – скрипт sessvars.js способен устанавливать и хранить данные сессий при помощи JavaScript и без использования cookies. Вместо cookies используется свойство window.name, прелесть которого в том, что оно сохраняет свое значение при перезагрузке страниц и может хранить до 2 мегабайт данных. Также как и в cookies здесь можно хранить только строковые данные. Чтобы обойти это ограничение sessvars.js использует преобразователь JSON в строку для сериализации объектных данных.

Скрипт работает во всех основных браузерах: IE 6/7, Firefox 1.5/2/3b5, Safari, Opera 9.

Как использовать

Подключаем скрипт:

<script type="text/javascript" src="sessvars.js"></script>

После этого в нашем распоряжении есть новый объект под названием sessvars, к которому, как и к обычному объекту JavaScript можно добавлять данные. Единственное отличие от обычных объектов это то, что это значение сохраняется при перезагрузке страницы. То есть, если мы добавим на одной странице следующее значение:

sessvars.myObj = {name: "Dima", age: 28}

то на других страницах сайта оно доступно через sessvars.myObj.

Свойствам sessvars можно давать любые имена, кроме $, которое уже задействовано для нескольких полезных функций:

  • sessvars.$.clearMem() – очищает занятую память.
  • sessvars.$.usedMem() – возвращает количество используемой памяти в килобайтах.
  • sessvars.$.usedMemPercent() – количество используемой памяти в процентах.
  • sessvars.$.debug() – показывает окно отладки.

Также имеется свойство sessvars.$.prefs, которое содержит несколько полезных опций, например свойство sessvars.$.prefs.memlimit хранит максимальное количество данных – по умолчанию 2000 килобайт, однако можно изменять для IE 7, Safari или Opera, которые имеют гораздо больший предел хранения данных.

И последняя очень важная деталь – безопасность. Фактически данные переменной window.name могут быть доступны для других скриптов на других доменах, поэтому никогда не храните таким образом секретные данные – пароли, номера кредиток и др.

Демо 1Демо 2 (сайт автора)скачать пример

Maklay.com - Большой каталог товаров для спорта и активного отдыха
  • http://egor-k.blogspot.com/ EgorK

    Все ничего, но что будет если юзер откроет следующую страницу в новом окне или табе? ;)

  • admin

    увы, ничего не будет – новая страница, новые данные ))
    автор обещал поработать над этим

  • http://www.jstoolbox.com/2008/05/22/persistjs-sessii-v-javascript-bez-cookies/ PersistJS – сессии в JavaScript без cookies | JSToolbox – все о JavaScript

    [...] cookiesВ одной из предыдущих статей я написал о скрипте sessvars.js, который позволяет работать с сессиями без cookies, [...]

  • http://www.jstoolbox.com/2008/07/04/eshhe-odno-primenenie-dlya-windowname/ Еще одно применение для window.name | JSToolbox – все о JavaScript

    [...] Это достоинство уже получило применение в скрипте sessvars.js, который используется для реализации механизма [...]

  • http://avtobazarok.co.ua yuriy88

    Мне интересно, можно ли реализовать с помощью этой функции, передавать данные о том сколько пользователь провел времени на сайте.

  • admin

    Думаю, что можно. Правда в этом случае нужно определять активность пользователя, и все равно данные на сервер нужно отправлять аяксом. Не очень то удобно.

  • most_of

    Да, я могу вытащить сохранённое значение, но только на другой странице сайта, а как получить это значение на той же странице, на которой я его определил? Прикол в том, что когда я обновляю страницу на которой предварительно задал этому объекту значение оно почему-то недоступно…

  • admin

    Это скорее всего баг в самом скрипте.

  • Сергей

    Баг в скрипте – это, конечно, хорошо. То есть плохо.
    Потому как этот класс был бы очень полезен именно при перерисовке окна.
    Может кто-нибудь этот баг уже исправил.

JSToolbox создан на основе WordPress