为什么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/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

回答:

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

回到顶部