为cookie设置新值会创建一个重复的cookie - jquery cookie

时间:2014-03-19 08:50:43

标签: javascript jquery

我在尝试删除Cookie时遇到问题,如果我已将其设置在其他页面上。这是场景:

我在我的主页上并设置了一个cookie值(通过在我的购物篮中添加产品),我可以在该页面上删除它。

但是当我进入另一个页面并尝试删除相同的cookie(产品)时,会再次使用新值创建cookie,它不会重新设置我当前的cookie。

我正在使用此代码添加/删除cookie:

$(".add-basket").click(function(e){
    e.preventDefault();
    var ean = $(this).attr('ean');
    var value = $(this).attr("value");
    var path = $(this).attr("imgpath");

    if($.cookie("mycookie")==undefined || $.cookie("mycookie")==""){
        $.cookie("mycookie" , ean + "~" + value + "~" + path);
    } else if($.cookie("mycookie").indexOf(ean) == -1 ){
        $.cookie("mycookie",$.cookie("mycookie") + "|" + ean + "~" + value + "~" + path);
    }

});

$(".remove-basket").click(function(e){
    e.preventDefault();
    var ean = $(this).attr('ean');
    var value = $(this).attr('value');
    var path = $(this).attr("imgpath");

    var val = ean + "~" + value + "~" + path; //value to be removed
    if ($.cookie("mycookie") !== undefined) {
        var cookie_val = $.cookie("mycookie");
        if (cookie_val.indexOf(val) !== -1) {
            //check value present in cookie
            var arr = cookie_val.split('|'); //remove spaces and split with |
            var index = arr.indexOf(val);//get index of value to be deleted
            arr.splice(index, 1);  //remove value from array 
            $.cookie("mycookie", arr.join('|')); //convert array to sting using join and set value to cookie
        }
    }

我错过了什么吗?

请帮忙

4 个答案:

答案 0 :(得分:2)

您需要设置cookie有效域,尝试使用以下命令设置cookie:

$.cookie("mycookie", 'value', {path: '/'});

这会使Cookie在整个网站上有效,如果这不起作用,请尝试清除旧的Cookie。

以下是使用JSON的示例:

// sample data
var data = [
  { ean: 1, value: 2, path: 3},
  { ean: 1, value: 2, path: 3}
];

// insert data
data.push({ ean:2, value: 3, path: 4});

// save to cookie
$.cookie('mycookie', JSON.stringify(data), {path: '/'});

// load from cookie
data = JSON.parse( $.cookie('mycookie') );

因此,将处理程序更改为:

$(".add-basket").click(function(e){
    e.preventDefault();
    var ean = 1;
    var value = 1;
    var path = 1;
    var cookie = JSON.parse( $.cookie("mycookie") || '[]' );
    cookie.push({
        ean: ean,
        value: value,
        path: path
    });

    $.cookie("mycookie", JSON.stringify(cookie), {path: '/'});
});

$(".remove-basket").click(function(e){
    e.preventDefault();
    var ean = $(this).attr('ean');
    var value = $(this).attr('value');
    var path = $(this).attr("imgpath");
    var cookie = JSON.parse( $.cookie("mycookie") || '[]' );

    $.each(cookie, function (index, row) {
        if (row.value == value) {
            cookie.splice(index, 1);
        }
    });

    $.cookie("mycookie", JSON.stringify(cookie), {path: '/'});
}

答案 1 :(得分:1)

您似乎遇到了设置Cookie Path的问题。来自jQuery Cookie plugin documentation

  

默认情况下,cookie的路径是创建cookie的页面的路径(标准浏览器行为)。如果要在整个域中使其可用,请使用{{ 1}}。默认值:创建cookie的页面路径。

答案 2 :(得分:0)

也许你的cookie只在一个页面上有效?您必须设置cookie的路径名。

$.cookie("mycookie" , ean + "~" + value + "~" + path, { path: '/' } ); // path:'/' is setting a cookie which is valid for all pages on your domain

答案 3 :(得分:0)

你甚至不需要清除cookie,只需设置相同的路径,例如你可以将路径设置为" /"哪个cookie在整个应用程序/站点中具有范围。但是,如果您没有指定路径,它将自动获取您放置代码文件的当前文件夹的路径。