为什么我无法在客户端检索 Cookie?



我目前正在开发一个聊天应用程序。前端是用react构建的,部署在vercel上,后端是用express构建的,在heroku上。因此,该应用程序目前处于生产模式。

在登录页面上,当用户提供凭据(电子邮件和密码(时,会向后端的/login路由发送一个请求,在该路由中,会检查用户提供的凭据是否正确。很简单。如果凭据不正确,则会将500状态代码发送回客户端,但如果凭据正确,则创建2个cookie,并将其与200状态代码一起发送回客户端。

这就是我正在挣扎的地方。当用户提供正确的信息时,2个cookie会在后端创建并发送到客户端。我知道这一点是因为我可以在chrome开发工具的Cookie选项卡中看到2个Cookie。但是,当我尝试使用document.cookie输出cookie的值时,它显示为一个空字符串。

前端:

const response = await fetch(url, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
credentials: 'include',
body: JSON.stringify({email: email, password: password})
})

后端:

res.cookie("Cookie1", value1, {sameSite: "none", secure: true, httpOnly: false})
res.cookie("Cookie2", value2, {sameSite: "none", secure: true, httpOnly: true})

服务器:

const cors=需要("cors"(

const corsOptions={origin:originUrl,凭据:true,方法:['GET','POST']}

app.use(cors(corsOptions((

//我确保在申报路线之前申报了以上内容

附加信息:

  1. 需要明确的是,当我使用document.cookie时,我希望只看到Cookie1的值。我知道我不会看到Cookie2的值,因为我将其httpOnly属性设置为true
  2. 我已经在stackoverflow上搜索了这个问题,虽然我确实看到一些帖子提出了与我相同的问题,但这些帖子都是通过将httpOnly属性设置为false来解决的。在这种情况下,情况并非如此
  3. 我在其他与本文不同的帖子中注意到的另一件事是,其他帖子在本地(本地主机上(托管前端和后端,而我在其他地方部署了它们。(不确定这是否重要。(
  4. 我不确定这是否相关,但在执行请求并在chrome开发工具中看到cookie后,当我重新加载页面时,这些cookie就会消失。(我觉得这不应该发生,但我是个初学者,所以我可能错了。(

如果你还有什么想知道的,请告诉我。提前谢谢。

我对前端了解不多,但要访问前端上的cookie,必须使用代理。Cookie只能在同一端口或服务器上访问
请查看此链接,希望它能对您有所帮助!

最新更新