我有一些保存cookie的JavaScript代码。但是,如果在保存cookie后,用户打开一个新选项卡,则表明cookie未保存。新标签位于同一个域中。
以下是我的Cookie设置/获取代码:
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++) {
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name) {
return unescape(y);
}
}
}
如果某些JavaScript调用setCookie('mycookie', 1)
,然后用户点击_target
设置为_blank
的链接,则Cookie不会加载到新标签中。因此getCookie('mycookie')
不会返回1
。
这里有什么问题?
答案 0 :(得分:1)
我想我已经明白了。
我在一个子目录中设置cookie,然后在另一个子目录中读取它。所以我在www.example.com/foo/
上设置了Cookie,然后在www.example.com/bar/
上加载了一个新标签,并且Cookie不再存在。我认为上面的setCookie函数没有正确处理这个问题。我的解决方案是使用more robust cookie library。
答案 1 :(得分:0)
这可能是一个安全问题,特别是如果这两个页面位于不同的域/子域
阅读此Question on SO并尝试实施