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

Setting a new value to a cookie creates a duplicate cookie - jquery cookie

本文关键字:一个 cookie jquery 创建 设置      更新时间:2023-09-26

当我试图删除cookie时,如果我将其设置在不同的页面上,我有一个问题。场景如下:

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

但是当我转到另一个页面并尝试删除相同的cookie(product)时,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
        }
    }

我错过了什么吗?

请帮

您需要设置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: '/'});
}

似乎你有cookie Path设置的问题。来自jQuery Cookie插件文档:

默认情况下,cookie的路径是创建cookie的页面的路径(标准浏览器行为)。如果您想让它在整个域中可用,请使用path: '/'。默认:创建cookie的页面路径。

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

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

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