0

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

长话短说,我有一个 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)。请求标头通过了 3 次具有不同值的相同 cookie (DoxMachineId)。(请看图片),这会导致我的c#代码无法找到正确的结果。

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

谢谢各位高手。

在此处输入图像描述

4

1 回答 1

0

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

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

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

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

于 2016-02-25T14:32:26.310 回答