使用 IIS express 在域和子域之间共享 cookie

Posted

技术标签:

【中文标题】使用 IIS express 在域和子域之间共享 cookie【英文标题】:Sharing cookies between domain and a subdomain using IIS express 【发布时间】:2018-08-27 05:16:20 【问题描述】:

我正在尝试在两个 ASP.NET mvc 6 应用程序之间共享一个 cookie:

第一个是 web api 应用程序,它应该代表主域“localhost”。

第二个是一个空的mvc网站客户端应用,一个index.html通过简单的ajax调用web api。此应用代表子域“cleint.lohalhost”。

由于某种原因,我的浏览器无法在客户端应用程序上设置 cookie。详情如下:

-设置web api生成的cookie头

Set-Cookie:mytoken=mytokenvalue; domain=.localhost; path=/; samesite=lax

-Ajax 调用:

$.get(
    url: 'http://localhost:5004/api/values',
    success: function (response)  console.log(response); ,
    error: function (error)  console.log(error); ,
    xhrFields: 
        withCredentials: true
    ,
    crossDomain: true
);

-最后,在 web api 应用程序上设置 cookie 的代码:

[HttpGet]
public IEnumerable<string> Get()

    Response.Cookies.Append("mytoken", "mytokenvalue", new CookieOptions()  Domain = ".localhost" );
    return new string[]  "value1", "value2" ;

-如果相关,我会使用 chrome 浏览器。

感谢任何形式的帮助,谢谢。

【问题讨论】:

我猜 Chrome 可能没有将 .localhost:5004 API cookie 传递给您的 localhost:80(可能是)MVC 应用程序,尽管不应将 AFAIK 端口号视为 cookie 域的一部分。您的 API cookie 是否存在于对您的 API 的后续请求中,即您是否验证过它实际上已被设置? 非常感谢您的反馈,是的,cookie 根本没有设置,我能够找到的解决方案如下详述。它也与 Chrome 无关,因为我也设法在 Edge 浏览器上重现了该错误。 【参考方案1】:

事实证明,我的浏览器仍然渴望另一个 '.'在域名上,所以我最终用'myapp.dev'替换了'localhost'(在两个域名上)并且它起作用了。 同样重要的是要注意,从 api 方面,我必须发送值为 '.myapp.dev' 而不是 'client.myapp.dev' 的域名 cookie 选项

【讨论】:

以上是关于使用 IIS express 在域和子域之间共享 cookie的主要内容,如果未能解决你的问题,请参考以下文章

域和子域之间的 Firebase 身份验证共享

js跨域访问

如何在 Spring Security 中的子域之间共享会话

cors 子域失败

ajax主域和子域之间的跨域问题

如何在每个都有自己的 GTM 和 GA 容器的根域和子域之间设置跨域跟踪