Статьи

Как написать библиотеку сессий без файлов cookie для JavaScript

(JavaScript) Cookie Monster В моем предыдущем посте « Переменные сеанса без 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», если имя сеанса не может быть найдено.

Я надеюсь, что вы найдете код полезным. Не стесняйтесь использовать его в своих проектах.

Полезные ресурсы:

Смотрите также: