ajax - 为什么 AJAX 请求返回后浏览器不设置 cookie?

标签 ajax cookies

我正在使用 $.ajax 发出 ajax 请求。响应设置了 Set-Cookie header (我已在 Chrome 开发工具中验证了这一点)。然而,浏览器在收到响应后没有设置cookie!当我导航到域中的另一个页面时,不会发送 cookie。 (注意:我没有执行任何跨域ajax请求;该请求与文档位于同一域中。)

我错过了什么?

编辑:这是我的ajax请求的代码:

$.post('/user/login', JSON.stringify(data));

这是请求,如 Chrome 开发工具所示:

Request URL:https://192.168.1.154:3000/user/login
Request Method:POST
Status Code:200 OK

Request Headers:
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:35
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
DNT:1
Host:192.168.1.154:3000
Origin:https://192.168.1.154:3000
Referer:https://192.168.1.154:3000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36
X-Requested-With:XMLHttpRequest

Form Data:
{"UserId":"blah","Password":"blah"}:

回应:

Response Headers:
Content-Length:15
Content-Type:application/json; charset=UTF-8
Date:Sun, 16 Mar 2014 03:25:24 GMT
Set-Cookie:SessionId=MTM5NDk0MDMyNHxEdi1CQkFFQ180SUFBUkFCRUFBQVRfLUNBQUVHYzNSeWFXNW5EQXNBQ1ZObGMzTnBiMjVKWkFaemRISnBibWNNTGdBc1ZFcDNlU3RKVFdKSGIzQlNXRkkwVjJGNFJ6TlRVSHA0U0ZJd01XRktjMDF1Y1c1b2FGWXJORzV4V1QwPXwWf1tz-2Fy_Y4I6fypCzkMJyYxhgM3LjVHGAlKyrilRg==; HttpOnly

最佳答案

好吧,我终于找到问题所在了。事实证明,在 AJAX 请求中发送 cookie 时,设置 Path 选项非常重要。如果您设置Path=/,例如:

Set-Cookie:SessionId=foo; Path=/; HttpOnly

...那么当您导航到不同的页面时,浏览器将设置 cookie。如果不设置 Path,浏览器将使用“默认”路径。显然,AJAX 请求设置的 cookie 的默认路径与直接导航到页面时使用的默认路径不同。我正在使用 Go/Martini,因此在服务器端我这样做:

session.Options(session.Options{HttpOnly: true, Path:"/"})

我猜Python/Ruby/等等。有类似的机制来设置Path

另请参阅:cookies problem in PHP and AJAX

关于ajax - 为什么 AJAX 请求返回后浏览器不设置 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22432616/

相关文章:

jquery - AJAX 加载的内容会影响 SEO/搜索引擎吗?

javascript - 如何在 Meteor 中跨多个发布请求保留 cookie?

java - 跨子域的JSESSIONID

ios - 在 iOS5 中让 cookie 与 PhoneGap 一起使用吗?

javascript - Google 转化跟踪成功回调

javascript - 将 id 值传递给 ajax 页面

Chrome 中的 Ajax + pushState 错误

javascript - 如何在ajax中使用动态添加的html类

php - 如何加密网站 cookie

java - JSP 中的 Cookie 无法正确读取