使用 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的主要内容,如果未能解决你的问题,请参考以下文章