繁体   English   中英

为什么jQuery ajax在我的请求标头中多次添加相同的cookie?

[英]Why jQuery ajax added same cookie in my request header multiple times?

我已经被这个问题困扰了好几个小时,想知道您是否可以帮助我或提供一些建议?

长话短说,我有一个asp.net Web api应用程序,在我的页面之一中,我试图从Web api加载一些数据并将其添加到几个下拉列表中。 无论如何,我在页面加载时使用jQuery ajax

$(document).ready(function () {
    //Fires when page loads
    LoadMachines();
    LoadMachieGroups();
    LoadPrinterServer();
    LoadSavePreference();
});

每个功能都完成类似的工作,例如

 function LoadMachieGroups() {
        console.log("Before group " + document.cookie);
        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "/api/Machine/MachineGroups",
            //data: "{}",
            success: function (response) {
                OnMachinesGroupLoadSuccess(response);
            }
        });

        console.log("after group " + document.cookie);
    }

问题是,我们的代码运行到第三个(LoadPrinterServer)和第四个函数(LoadSavePreference)。 请求标头将具有不同值的相同cookie(DoxMachineId)传递了三次。 (请参阅图片),这会在我的c#代码中引起麻烦,以找到正确的结果。

我的问题是:1.)为什么同一Cookie会多次添加到标题中? 这是因为有多个ajax调用吗? 2)如何解决问题? 例如:删除cookie?

谢谢先进的家伙。

在此处输入图片说明

由于我偶然发现了相同(或非常相似)的问题,并且在其他地方找不到解决方案,因此,我遇到了严重挫折之后找到的自我解决方案:

当我将set-cookie标头发送给客户端时,我错过了在服务器端将其path参数设置为/ (根)的情况。 客户端将其解释为将cookie的路径设置为其当前目标路径的叶的父级。 在我的情况下,这意味着/api (因为它一直是/api/create的ajax调用)。

因此,客户端最终在每个路径中存储了一个cookie实例(在我的情况下,对于每个api调用,在客户端存储了一个cookie实例,而对于根路径则存储了一个cookie。通过加载资源来设置)。

每当客户端稍后向服务器发送请求时,它都会将与当前目标路径匹配的所有cookie实例(及其各自的值)附加到该请求(同样,在我的情况下,只要客户端请求/api/create它并附加路径/的cookie实例以及路径/api的实例,这意味着具有两个不同值的同一cookie)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM