为什么AJAX请求返回后浏览器没有设置cookie?
我正在使用$ .ajax发出ajax请求。响应具有Set-Cookie
标题集(我已经在Chrome开发工具中对此进行了验证)。但是,浏览器在收到响应后
不会 设置cookie!当我导航到域中的另一个页面时,不会发送cookie。(注意:我没有执行任何跨域ajax请求;该请求与文档位于同一域中。)
我想念什么?
:这是我的ajax请求的代码:
$.post('/user/login', JSON.stringify(data));
这是请求,如Chrome开发者工具所示:
Request URL:https://192.168.1.154:3000/user/loginRequest 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
回答:
好的,所以我终于找到了问题所在。事实证明,Path
在AJAX请求中发送cookie时,设置选项很重要。如果设置Path=/
,例如:
Set-Cookie:SessionId=foo; Path=/; HttpOnly
…然后,当您导航到其他页面时,浏览器将设置cookie。如果不设置Path
,浏览器将使用“默认”路径。显然,由AJAX请求设置的Cookie的默认路径与直接导航到页面时使用的默认路径不同。我正在使用Go
/ Martini,因此在服务器端我这样做:
session.Options(session.Options{HttpOnly: true, Path:"/"})
我猜想是Python / Ruby / etc。具有类似的设置机制Path
。
以上是 为什么AJAX请求返回后浏览器没有设置cookie? 的全部内容, 来源链接: utcz.com/qa/425258.html