今天碰到个搞怪的问题,用javascript修改cookie。
从网上抄了一段代码
function GetCookieVal(offset)
//获得Cookie解码后的值
{
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie(name)
//获得Cookie的原始值
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return GetCookieVal(j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie(name, value, expires, path, domain, secure) {
document.cookie = name + "=" + encodeURI(value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
写了个测试
var name = "btq";
var c = GetCookie(name);
if (c != null)
alert("old cookie = " + c);
else {
alert("new cookie");
var d = new Date();
d = d.setTime(d.getTime() + 3600);
SetCookie(name, "测试时间:" + (new Date()).getTime(), d,"/","zq88.net");
}
结果在FF和谷歌浏览器上正常,第1次显示new cookie,以后就是old cookie~
但是到了IE7下面就完蛋了,都是显示new cookie,原因是IE7下面document.cookie是只读的。
我找了W3C和JScript的资料,但都没有找到相应的替换办法,只好来这儿找高人赐教了 -_-b
哪位兄弟解决过此问题的,请帮帮忙,先谢啦~
IE7下的cookie是只读的么?
你的原因是在于你设置过期时间太少,setTime是以毫秒为单位的(3600ms=3.6s)。你改成
d = d.setTime(d.getTime() + 36000);
SetCookie(name, "测试时间:" + (new Date()).getTime(), d.toString(),"/","zq88.net");
试试,就可以了。。
3600毫秒一瞬间就过期了,多加两个0吧,哈哈。