2

我已将 WebApi 项目分为 MVC 项目 ( http://mydomain.com ) 和 WebApi 项目 ( http://api.mydomain.com )。

我的 MVC 项目只管理身份验证和服务视图(使用 knockoutJS 和 ajax)。

我的问题是,当从 webapi 域(使用 ajax)请求信息时,没有发送来自 MVC 项目的 cookie。或者更确切地说,在测试期间,我在不同部分使用了两个 IIS Express 服务器。

该项目将在稍后部署到 Azure,因此任何解决方案都必须在两个网站之间运行。

那么我怎样才能让这些cookies通过呢?还是我应该改用某种令牌?

编辑

它一直有效,直到我添加contentType$.ajax请求中。然后我得到了 CORS 预检选项。我用我认为正确的标题回答了 200。如果我删除该选项,我会再次收到包含所有 cookie 的工作请求。

作品

$.ajax({
    url: "http://localhost:54304/Organization/",
    type: "POST",
    data: "$top=10",
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    success: function (data) { console.log(data); }
});

不工作:

$.ajax({
    url: "http://localhost:54304/Organization/",
    contentType: 'application/json', //<--- this triggers preflight
    type: "POST",
    data: "$top=10",
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    success: function (data) { console.log(data); }
});

现在这是一个 jquery“功能”还是 CORS 的工作原理?我应该设置哪些标题?我试图回复:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:51343
4

1 回答 1

2

设置 cookie 时,您还设置了 cookie 应应用于哪些域名。
Cookies 仅依赖于域名(以及可选的路径);不是在你有什么样的服务器上。

在您的情况下,您可以将域设置为.mydomain.com,这是一个将发送到根域和所有子域的通配符 cookie。

于 2013-04-18T19:09:07.130 回答