什么导致cookie不能在客户端上设置?

时间:2013-02-10 18:23:43

标签: ajax http cookies cors

我有一个使用jQuery.ajax对另一台主机执行请求的Web应用程序(现在实际上是相同的,因为我使用的是“localhost”的不同端口)。然后服务器返回一个cookie。

Chrome的开发工具中显示的HTTP响应中的Cookie值为

Set-Cookie: MyUserSession=JxQoyzYm1VfESmuh-v22wyiyLREyOkuQWauziTrimjKo=;expires=Sun, 10 Feb 2013 22:08:47 GMT;path=/api/rest/

所以将来有4个小时的到期时间。

但是,Cookie不会随后续请求一起存储和发送(在Chrome和Firefox中都经过测试)。我首先认为它必须是“2013年2月10日”而不是“2013年2月10日”,但这并没有什么不同。 Chrome还会在回复的Cookie标签上将“过期”显示为“无效日期”,但也可能是Dev Tools bug

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在经历了几个小时的类似场景(没有CORS)之后,我发现了另一个可能的原因:确保明确设置cookie的路径

我的前端应用正在调用HOST_URL/api/members/login,而这正在返回正确的Set-Cookie标题,没有路径。

我可以在Chrome DevTools中看到Response Cookies下的Cookie,但后续请求不包括在内。去了chrome://settings/cookies,Cookie就在那里,但路径是/api/members

在服务器端设置cookie时指定根路径修复了问题。