PersistJS - сессии в JavaScript без cookies
В одной из предыдущих статей я написал о скрипте sessvars.js, который позволяет работать с сессиями без cookies, используя свойство window.name. Однако у этого скрипта есть одна большая проблема - сессии сохраняются только в том случае, если вы открываете ссылки в том же окне. Если же открывать ссылки в новом окне/табе, то данные сессий там будут не доступны.
Скрипт, который я вам сегодня представлю - PersistJS, также работает с сессиями, однако в отличии от sessvars.js он использует для хранения данных другие “накопители”. Суть в том, что многие браузеры имеют механизмы хранения данных на стороне клиента отличные от cookies. Все они намного проще и лучше последних, могут хранить больше данных, и не передаются в HTTP запросах. Однако, каждый браузер реализует эти механизмы по-своему. В данный момент существуют 4 различных решения для хранения данных на стороне клиента:
- globalStorage: Firefox 2.0+, Internet Explorer 8
- localStorage: development WebKit
- openDatabase: Safari 3.1+
- userdata: Internet Explorer 5.5+
Помимо вышеперечисленного, работу с сессиями можно организовать при помощи плагинов Adobe Flash и Google Gears, однако они также имеют свои проблемы - Flash может быть отключен или отсутствовать в браузере, а Google Gears пока еще не очень распространен.
PersistJS способен работать с сессиями исользуя собственный API и автоматически определяя, какую технологию использовать для хранения данных. В данный момент он поддерживает следующие механизмы:
- Flash 8
- Google Gears
- localstorage
- whatwg_db
- globalstorage
- UserData (Internet Explorer)
- cookie: хранение данных при помощи Cookie.
Как видите Cookies также могут использоваться, но только в том случае если другие методы невозможно использовать. Можно также явно запретить использовать Cookies, об этом ниже.
Это пока что первый релиз PersistJS, и протестирован он только на FireFox 2.0, FireFox 3.0rc1, IE7, и Safari 3.1.
Примеры
Создание хранилища данных и сохранение там данных:
// создаем новое хранилище данных
var store = new Persist.Store('My Data Store');
// данные для хранения
var data = "Некая длинная строка ...........";
// сохраняем данные
store.set('saved_data', data);
Получение данных:
// получаем данные и показываем их пользователю
store.get('saved_data', function(ok, val) {
if (ok)
alert('saved data = ' + val);
});
Удаление данных:
store.remove('saved_data');
Получение типа хранилища, используемого скриптом для хранения данных:
var info = [
'Тип: ', Persist.type || 'none', ', ',
'Размер: ', (Persist.size < 0) ? 'unknown' : Persist.size
].join('');
alert(info);
Явно запрещаем использовать Cookies скриптом:
Persist.remove('cookie');
Использование
Подключаем скрипт:
<script type='text/javascript' src='persist-min.js'></script>
После загрузки DOM, создаем хранилище данных:
// глобальный объект для доступа к данным
var store;
window.onload = {
// создаем хранилище данных "My Application"
store = new Persist.Store('My Application');
}
Имя хранилища данных является обязательным параметром для конструктора. Можно создавать множество таких контейнеров для данных, но все они должны иметь уникальные имена.
Далее добавляем данные, сохраняем как показано в разделе “Примеры”.