|
|
(function($){
|
|
|
var cookieExpireTime = 1209600; // cookie项过期时间 2周
|
|
|
$.session = {
|
|
|
_id: null,
|
|
|
|
|
|
_cookieCache: undefined,
|
|
|
|
|
|
|
|
|
_init: function()
|
|
|
{
|
|
|
//if (!window.name) {
|
|
|
// window.name = Math.random();
|
|
|
//}
|
|
|
//this._id = window.name;
|
|
|
// 如果id设置为动态,会导致浏览器不断生成cookie,进而导致取值有问题
|
|
|
this._id = 'sessionID';
|
|
|
this._initCache();
|
|
|
|
|
|
// See if we've changed protcols
|
|
|
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() + 28800000 + cookieExpireTime)).toUTCString(); // 28800000 含义:世界时间+8天=北京时间
|
|
|
|
|
|
},
|
|
|
|
|
|
_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() + 28800000 + cookieExpireTime)).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); |