【发布时间】: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 浏览器上重现了该错误。
标签: c# iis asp.net-web-api cookies jwt