В моем предыдущем посте « Переменные сеанса без cookie» в JavaScript мы обнаружили, как данные сеанса JavaScript можно сохранять в свойстве window.name. Сегодня мы создаем библиотеку JavaScript для использования этого свойства.
Просмотрите демонстрационную страницу библиотеки сеансов JavaScript…
Код предоставляет три основных метода:
- Session.set ( name , object ) — сохранить именованное значение сеанса / объект
- Session.get ( name ) — получить именованное значение сеанса / объект
- Session.clear () — сбросить все данные сеанса
Другой метод Session.dump () возвращает все данные сеанса в кодировке JSON. Обычно это используется только для целей отладки.
Код JavaScript загружается непосредственно перед закрывающим тегом body
Сначала мы загружаем библиотеку JSON:
<script type="text/javascript" src="json-serialization.js"></script>
Библиотека JSON предоставляет методы кросс-браузерной сериализации, требуемые нашей библиотекой Session. Для получения дополнительной информации см. Кросс-браузерная сериализация JSON в JavaScript .
Файл session.js загружается следующим. Это автономный код, который может быть реализован в любой системе — он не зависит от jQuery или любой другой библиотеки JavaScript. Работа через код:
if (JSON && JSON.stringify && JSON.parse) var Session = Session || (function() {
// window object
var win = window.top || window;
// session store
var store = (win.name ? JSON.parse(win.name) : {});
Первая строка определяет наш сессионный модуль. Однако он будет определен только в том случае, если библиотека JSON была загружена и нет других конфликтующих переменных или функций сеанса.
Вторая строка устанавливает win в ‘window.top’. Он устанавливается в «окно», если оно недоступно (возможно, если браузер не поддерживает фреймы).
Затем мы определяем объект «store» для хранения всех наших данных сеанса. Существующие данные в кодировке JSON в свойстве window.name анализируются, но, если это недоступно, для «store» устанавливается пустой объект.
// save store on page unload
function Save() {
win.name = JSON.stringify(store);
};
// page unload event
if (window.addEventListener) window.addEventListener("unload", Save, false);
else if (window.attachEvent) window.attachEvent("onunload", Save);
else window.onunload = Save;
Закрытая функция Save () назначает сериализованную строку объекта store для свойства window .name. Следующие три строки определяют кросс-браузерное событие, которое вызывает функцию Сохранить, когда страница выгружается. Поэтому ваши страницы могут изменять «хранилище» настолько, насколько это необходимо, но тяжелая работа по сериализации и сохранению происходит только в самый последний момент.
// public methods
return {
// set a session variable
set: function(name, value) {
store[name] = value;
},
// get a session value
get: function(name) {
return (store[name] ? store[name] : undefined);
},
// clear session
clear: function() { store = {}; },
// dump session data
dump: function() { return JSON.stringify(store); }
};
})();
Наконец, у нас есть четыре открытые функции set, get, clear и dump, которые соответственно обрабатывают объект store. Метод Session.get () вернет значение JavaScript «undefined», если имя сеанса не может быть найдено.
Я надеюсь, что вы найдете код полезным. Не стесняйтесь использовать его в своих проектах.
Полезные ресурсы:
- Страница демонстрации переменных сеанса JavaScript
- Полный код JavaScript session.js
- Скачать полный код в ZIP-файл
Смотрите также: