Chrome 如何判断为什么没有发送cookie?

c9qzyr3d  于 2023-06-19  发布在  Go
关注(0)|答案(8)|浏览(150)

我正在使用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。如果有人知道我很想知道为什么饼干不被发送。但是,此外,我很想知道我如何才能告诉为什么以及如何在将来更好地调试这个问题。
下面是一些请求,这些请求来自Chrome的Dev工具
下面是我从/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
cqoc49vn

cqoc49vn1#

如果您正在处理跨域请求并使用XHR客户端(如fetch API),请注意withCredentials参数。
XMLHttpRequest.withCredentials属性是一个布尔值,指示是否应使用凭据(如cookie、授权标头或TLS客户端证书)发出跨站点访问控制请求。设置withCredentials对同一站点请求没有影响。

w6lpcovy

w6lpcovy2#

我在设置cookie时收到了这个错误,而没有在cookie设置中指定; path=/。然后我的Web服务器将某些请求路由到我的Web服务器/,并且没有设置cookie,因为它只对我最初设置的/auth有效。

请注意,上面的Path是“/auth”,这是它有效的地方。在我的cookie中设置路径后:

`nz_auth_jwt=${jwt}; path=/; expires=...`

我在随后的请求中看到了我的cookie。并验证了开发工具中的路径被正确设置为对所有路由有效,这正是我在我的情况下想要的。

nuypyhwy

nuypyhwy3#

Evan Carroll链接到 chrome 的问题(现在重定向到这里: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会做得很好,当它发生时,发布一个关于这一点的小日志通知。唉,这会让我们大家都省去很多悲伤。

dgiusagp

dgiusagp4#

到2022年,Chrome...
在 * 开发人员工具>网络选项卡>标题>响应 * 中,您可以看到为什么没有设置cookie。

b4wnujal

b4wnujal5#

如何判断未发送cookie的原因:

  • 转到网络选项卡,然后单击未与您的Cookie一起发送的请求。
  • 转到刚刚出现的“Cookie”选项卡。
  • 勾选“显示已过滤的请求Cookie”

然后,一个小的“i”标签将出现在阻止发送cookie的属性旁边。您可以将鼠标悬停在上面查看详细信息:

0x6upsns

0x6upsns6#

这是一个Chrome特有的bug。还没有修复。

#56211 chrome.cookies对localhost域名失败

https://code.google.com/p/chromium/issues/detail?id=56211
可能也想读this question。这个问题并不是针对chrome的,而是针对localhost行为(不像这个问题)。

jecbmhm3

jecbmhm37#

问题是这样的:
return dev;
引用自RFC 2945
Domain属性的值指定cookie有效的域。如果显式指定的值不是以点开头,则用户代理提供前导点。
因此,Web客户端只会在主机地址以.dev.结尾时发送cookie
尝试发送不带域属性的cookie。

q3aa0525

q3aa05258#

在我的例子中,这是因为Fetch API不发送cookie,除非credentials: "include"作为一个选项。

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));

相关问题