Skip to main content
 首页 » 编程设计

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

2024年05月22日42shangdawei

我正在使用 $.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