【问题标题】:Save Cookies, Then Open Link in New Tab保存 Cookie,然后在新选项卡中打开链接
【发布时间】:2012-04-07 17:24:00
【问题描述】:

我有一些保存 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

这里有什么问题?

【问题讨论】:

  • 这 2 个页面是否属于不同的域?
  • 是的,上面已经澄清了。
  • 发布了一个答案,看看是否有帮助:)
  • 对不起,我的意思是他们在同一个域上,没有不同。

标签: javascript cookies


【解决方案1】:

我想我明白了。

我在一个子目录上设置 cookie,然后在另一个子目录上读取它。所以我在www.example.com/foo/ 上设置了cookie,然后在www.example.com/bar/ 上加载了一个新标签,cookie 不再存在。我认为上面的 setCookie 函数不能正确处理这个问题。我的解决方案是使用more robust cookie library

【讨论】:

    【解决方案2】:

    这可能是一个安全问题,特别是如果两个页面位于不同的域/子域中

    阅读此Question on SO 并尝试实施

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2012-05-03
    相关资源
    最近更新 更多