jquery.session.js 2.66 KB
(function($) {
	$.session = {
		_id : null,
		_cookieCache : undefined,
		_init : function() {
			if (!window.name) {
				window.name = Math.random();
			}
			this._id = window.name;this._initCache();
			var matches = (new RegExp(this._generatePrefix() + "=([^;]+);")).exec(document.cookie);
			if (matches && document.location.protocol !== matches[1]) {
				this._clearSession();
				for (var key in this._cookieCache) {
					try {
						window.sessionStorage.setItem(key, this._cookieCache[key]);
					} catch (e) {}
					;
				}
			}
			document.cookie = this._generatePrefix() + "=" + document.location.protocol + ';path=/;expires=' + (new Date((new Date).getTime() + 120000)).toUTCString();
		},
		_generatePrefix : function() {
			return '__session:' + this._id + ':';
		},
		_initCache : function() {
			var cookies = document.cookie.split(';');
			this._cookieCache = {};
			for (var i in cookies) {
				var kv = cookies[i].split('=');
				if ((new RegExp(this._generatePrefix() + '.+')).test(kv[0]) && kv[1]) {
					this._cookieCache[kv[0].split(':', 3)[2]] = kv[1];
				}
			}
		},
		_setFallback : function(key, value, onceOnly) {
			var cookie = this._generatePrefix() + key + "=" + value + "; path=/";
			if (onceOnly) {
				cookie += "; expires=" + (new Date(Date.now() + 120000)).toUTCString();
			}
			document.cookie = cookie;
			this._cookieCache[key] = value;return this;
		},
		_getFallback : function(key) {
			if (!this._cookieCache) {
				this._initCache();
			}
			return this._cookieCache[key];
		},
		_clearFallback : function() {
			for (var i in this._cookieCache) {
				document.cookie = this._generatePrefix() + i + '=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
			}
			this._cookieCache = {};
		},
		_deleteFallback : function(key) {
			document.cookie = this._generatePrefix() + key + '=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
			delete this._cookieCache[key];
		},
		get : function(key) {
			return window.sessionStorage.getItem(key) || this._getFallback(key);
		},
		set : function(key, value, onceOnly) {
			try {
				window.sessionStorage.setItem(key, value);
			} catch (e) {}
			this._setFallback(key, value, onceOnly || false);return this;
		},
		'delete' : function(key) {
			return this.remove(key);
		},
		remove : function(key) {
			try {
				window.sessionStorage.removeItem(key);
			} catch (e) {}
			;this._deleteFallback(key);return this;
		},
		_clearSession : function() {
			try {
				window.sessionStorage.clear();
			} catch (e) {
				for (var i in window.sessionStorage) {
					window.sessionStorage.removeItem(i);
				}
			}
		},
		clear : function() {
			this._clearSession();this._clearFallback();return this;
		}
	};$.session._init();
})(jQuery);