【问题标题】:WebApi and MVC in different projects, share cookies?不同项目中的WebApi和MVC,共享cookie?
【发布时间】:2013-04-12 01:14:18
【问题描述】:

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

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

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

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

那么我怎样才能让这些 cookie 被发送出去呢?还是我应该改用某种令牌?

编辑

在我将 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

【问题讨论】:

    标签: asp.net-web-api cookies cross-domain


    【解决方案1】:

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

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

    【讨论】:

    • 它也适用于不同的端口吗?这是表单身份验证 cookie
    • Cookie 始终跨端口工作。 (这可以说是一个设计缺陷)
    • 这很奇怪,因为我在 Google Chrome 中使用了开发工具,请求中没有包含任何 cookie。但我会检查 cookie 域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多