jQuery Cookie路径

37

我使用jQuery cookie插件来存储cookie,在下面的代码中,我可以保存一个7天的Cookie,但它只能在创建它的页面上保存。 我希望cookie在整个网站上都可用。

$.cookie('basket',basket,{ expires: 7 });

我试图设置一个路径,但似乎没有起作用。

$.cookie('basket',basket,{ expires: 7, path:'/' });

完整代码:这个代码运行良好,但它只会保存当前页面的cookie。

function add_to_basket(id,title){
if($.cookie('basket')){
    basket=$.cookie('basket');

    var basket_array = basket.split(',');

    var index = jQuery.inArray(id,basket_array);
    if(index > -1){
        return false;
    }else{
        basket+=','+id;
        $.cookie('basket',basket,{ expires: 7 });
    }
}else{

    basket=id;
    console.log(basket);
    $.cookie('basket',basket,{ expires: 7 });

}

什么是“basket”?如果它是一个对象,你需要先通过JSON.stringify()运行它,这样你就可以存储一个字符串。 - Interrobang
@waterschaats,你能多放一些脚本吗? - mgraph
2
你的Cookie设置代码看起来很好。如果你在Firefox中检查Cookie,它会告诉你一些信息,比如域名、路径和过期日期。这可能会给你一些线索,让你知道问题出在哪里。其他浏览器也应该能提供相同的数据。 - Rory McCrossan
读取 cookie 似乎是问题所在? - waterschaats
5个回答

60

我之前遇到了同样的问题。解决方法是在写入Cookie时始终指定路径。

$.cookie('basket', value, { path: '/' })

这是一个与jQuery cookie插件相关的问题。它将默认使用当前页面的路径。


9
当我尝试使用这种方法时,它实际上是将cookie(在您的情况下为'basket')设置为具有路径属性的对象,而不是检索cookie。 - Mike Howsden
2
这是用于设置给定路径的cookie,而不是检索。 - Aditya M P
1
这是错误的。它创建了一个带有第二个参数值的cookie。 - Larry Williamson
我不认为这是真的,我总是在 cookie 的 path 属性中写入“/”,但我突然注意到我有两个同名但值不同的 cookies - 它们都是在我期望的“/”路径下创建的,神奇的是也在“/about”路径下创建了一个...并非总是,但有时候会发生这种情况。 - Dalibor

16

1

我认为修改插件的主体并不是一个好主意。不幸的是,该插件不可配置。我使用包装函数:

$.cookie2 = function(key, value, options)
{
    if (typeof value!='undefined')
    { // setting cookie
        var defaults = {expires: 180, path:'/'};
        $.extend(defaults, options || {});
        return $.cookie(key, value, defaults);
    }
    // getting cookie
    return $.cookie(key, value, options);
}

使用方法:

// set with defaults defined in wrapper
$.cookie2('name', 'value');

// rewrite defaults or add something
$.cookie2('name', 'value', {expires: 1, something: 'else'}); 

1

我曾经遇到过同样的问题,但是后来发现只有在压缩 jquery.cookie.js 文件并且放入时才会出现这种情况。

config.defaults = {expires: 180, path:'/', domain: '.domain.com' };

它将cookie路径设置为“/”,无论加载哪个内部页面,例如yourdomain.com/en/page1/page - cookie路径= '/'

0
使用这个。
$.cookie('basket', value, { path: '/' });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接