原来写过一个 cookie 操作的应用,不过,存在很大问题。
首先,每个 cookie 可以单独设置 expires, path, domain, secure, 但是我以前写的那个,只能对所有 cookie 设置同样的 expires, path, domain, scure。
其次,删除 cookie ,只能整个删除,不能删除哪个指定的 cookie.
现在重新写了一个:
JObj.JCookie = {};
(function($){
$.getExpires = function(y,m,d,h,i,s,ms){
var date = new Date();
y = isNaN(y) ? date.getFullYear() : y;
m = isNaN(m) ? date.getMonth() : m - 1;
d = isNaN(d) ? date.getDate() : d;
h = isNaN(h) ? date.getHours() : h;
i = isNaN(i) ? date.getMinutes() : i;
s = isNaN(s) ? date.getSeconds() : s;
ms = isNaN(ms) ? date.getMilliseconds() : ms;
return new Date(y,m,d,h,i,s,ms).toUTCString();
}
$.getExpiresByUTCString = function(UTCString){
var s = new Date(UTCString).toUTCString();
if(s == 'NaN' || s == 'Invalid Date')
return null ; // IE,Opera NaN , FF,Safari Invalid Date;
else
return s;
}
$.set = function(k, v, expires , path, domain, secure){
var cookie = k + '=' + encodeURIComponent(v);
if(expires) cookie += ";expires=" + expires;
if (path) cookie += ";path=" + path;
if (domain) cookie += ";domain=" + domain;
if (secure) cookie += ";secure";
document.cookie = cookie;
}
/*
以前是把所有 cookie 都取出放到一个对象里,在 get 的时候,直接从那个对象里取来,现在想想,那样并不正确。因为假如某个 cookie 的过期时间过了,那个对象并没有更新。
*/
$.get = function(k){
var cks = document.cookie.split(';');
var t;
for(var i=0;i<cks.length;i++){
t = cks[i].split('=');
if(k == t[0].trim()) return decodeURIComponent(t[1]);
}
}
$.remove = function(k){
$.set(k,'', $.getExpires( new Date().getFullYear() - 1 ));
}
$.empty = function(){
var cks = document.cookie.split(';');
var t;
for(var i=0;i<cks.length;i++){
$.remove(cks[i].split('=')[0].trim());
}
}
})(JObj.JCookie);
JObj.use('JCookie');
var jc = JObj.JCookie;
/*alert(jc.get('sex'));
jc.set('name','xling',jc.getExpires(2010,2));
jc.set('sex','male',jc.getExpires(2020));
jc.remove('name');
alert(jc.get('sex'));
*/
//jc.remove('sex');
//jc.set('version',1,jc.getExpires(2009,04,05));
jc.empty();
</script>
| < Prev |
|---|



