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

时间:2013-11-11 06:01:13

标签: javascript jquery ajax cookies asp.net-web-api

我被困在这里好几个小时,想知道你是否可以帮助我或给我一些建议?

长话短说 我有一个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?

先谢谢你们。

enter image description here

1 个答案:

答案 0 :(得分:0)

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

当我将set-cookie标头发送到客户端时,我错过了将path参数设置为服务器端的/(根)。客户端将此解释为将cookie的路径设置为其当前目标路径的叶子的父路径。就我而言,这意味着/api(因为它是对/api/create的ajax调用)。

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

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