小编典典

为什么AJAX请求返回后浏览器没有设置cookie?

ajax

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

阅读 717

收藏
2020-07-26

共1个答案

小编典典

好的,所以我终于找到了问题所在。事实证明,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

2020-07-26