我正在使用Chrome,我想知道是否有扩展或方法来说明为什么没有发送cookie。
我向http://dev/login
提出了一个请求并且它正在返回,
Set-Cookie:DevId=cffbc7e688864b6811f676e181bc29e6; domain=dev; path=/; expires=Tue, 16-Jun-2015 21:27:43 GMT
但是,在http://dev/Base/User/home/
的帖子中,我没有发送DevId
Cookie。我很想知道如果有人碰巧知道,为什么不发送cookie。但是,此外,我很想知道如何告诉为什么以及如何在将来更好地调试此问题。
以下是从Chrome的开发工具
中捕获的一些请求所以这是我对/login
的回复(注意Set-Cookie标题),
HTTP/1.1 200 OK
Date: Tue, 16 Jun 2015 19:57:43 GMT
Server: Apache
Pragma: no-cache
Cache-control: no-cache, max-age=0
Set-Cookie: DevId=cffbc7e688864b6811f676e181bc29e6; domain=dev; path=/; expires=Tue, 16-Jun-2015 21:27:43 GMT
Cache-Control: max-age=0
Expires: Tue, 16 Jun 2015 19:57:43 GMT
Keep-Alive: timeout=10, max=10
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json; charset=ISO-8859-1
这是我发给/Base/User/home/1
的帖子(注意没有cookie),
POST /Base/User/home/ HTTP/1.1
Host: dev
Connection: keep-alive
Content-Length: 0
Origin: http://dev
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.81 Chrome/43.0.2357.81 Safari/537.36
Content-type: application/x-www-form-urlencoded; charset=UTF-8
Accept: text/javascript, text/html, application/xml, text/xml, */*
X-Prototype-Version: 1.7.2
X-Requested-With: XMLHttpRequest
Referer: http://dev/user/1/home
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
答案 0 :(得分:12)
转到“网络”标签,然后单击未与Cookie一起发送的请求。
转到刚刚出现的“ Cookies”标签。
选中“显示过滤出的请求cookie”以查看所有未发送的cookie,它们将显示为黄色。
然后,在阻止发送Cookie的属性旁边会出现一个小“ i”标签。您可以将鼠标悬停以查看详细信息。
答案 1 :(得分:3)
问题在于:
域= dev的;
引自RFC 2945:
Domain属性的值指定域 cookie的有效期。如果是明确指定的值 不以点开头,用户代理提供一个前导点。
因此,如果主机地址以.dev.
尝试发送不带域属性的cookie。
答案 2 :(得分:2)
这是Chrome特定的错误。还没有解决..
也许还想阅读this question。这个问题并不特定于chrome,但它特定于localhost行为(与此问题不同)。
答案 3 :(得分:1)
如果您是跨域请求并使用XHR客户端(例如提取API),请注意withCredentials参数。
XMLHttpRequest.withCredentials属性是一个布尔值,指示是否应使用cookie,授权标头或TLS客户端证书之类的凭据发出跨站点访问控制请求。设置withCredentials不会影响同一站点的请求。
答案 4 :(得分:1)
我在未设置Cookie设置中指定; path=/
的情况下设置Cookie时收到此错误。然后,我的Web服务器正在将某些请求路由到位于/
的Web服务器上,并且未设置cookie,因为它仅对我最初设置它的/auth
有效。
请注意,上面的Path
是“ /auth
”,在此处有效。在我的Cookie中设置路径后:
`nz_auth_jwt=${jwt}; path=/; expires=...`
我在随后的请求中看到了我的cookie。并验证了开发工具中的路径是否已正确设置为对所有路径都有效,这正是我所需要的。
答案 5 :(得分:1)
就我而言,这是因为除非提供credentials: "include"
作为选项,否则Fetch API不会发送cookie。
fetch('API_ENDPOINT',{
method: 'POST',
credentials: 'include',
body: JSON.stringify(some_json_obj)
})
此外,我还必须按如下方式配置Node.js(express.js)后端CORS。
const cors = require('cors')
const corsOptions = {
origin: 'http://localhost:3000',
credentials: true
}
app.use(cors(corsOptions));
答案 6 :(得分:0)
Evan Carroll链接到铬的问题(现在重定向:https://bugs.chromium.org/p/chromium/issues/detail?id=56211)似乎相关,并标记为"固定"。但是,目前还不是很清楚。
我在/ etc / hosts中遇到了类似主机条目的问题:
127.0.0.1 local.app.service.tld
但是在将其改为
之后127.0.0.1 app.localhost
它再次按预期工作。我认为当发生这种情况时,chrome会发布一个关于此的小日志通知。唉,它会给我们带来很大的悲伤。