响应标头 Set-Cookie 不在浏览器中存储 cookie

Ver*_*333 3 browser setcookie

我正在设置 2 个 cookie 以响应从后端到浏览器的情况。一种是安全的HTTPOnly(它是refreshToken),另一种没有这些参数,因此JavaScript可以访问它(携带有关refreshToken设置和过期时间的信息)。

Cookie 响应:

在此输入图像描述

这两个都没有在浏览器中设置。我研究了所有关于cookie的知识,老实说,我在这里迷路了,需要你的帮助。

起初,它在我的本地主机环境中运行得很好(后端在本地主机:8080,前端在本地主机:3000)。然后我进行了部署,但它不起作用。我在本地主机上再次测试,并检查了“禁用缓存”以防止不必要的行为,但即使在那里它也不起作用。

我会提到我正在使用 CORS,不确定这是否会干扰:

在此输入图像描述

我在 Chrome 和 Firefox 中对此进行了测试。

Ver*_*333 9

我终于想通了。Cookie 有效。答案是在前端和后端都设置withCredentials = true

首先,我认为前端参数withCredentials仅当我们想要发送隐藏在安全 HttpOnly cookie 中的凭据时使用,我们无权访问这些凭据,但浏览器可以访问。显然,当我们想从响应中设置 cookie 时,也会使用它。链接到文档

来自不同域的响应无法为其自己的域设置 cookie 值,除非在发出请求之前将 withCredentials 设置为 true

其次,我们还必须在后端将 withCredentials添加到CorsFilter(在 Spring boot 中),否则我们会收到 CORS 错误。

CorsConfiguration()
    .apply {
        allowedOrigins = listOf(uiUrl)
        allowedHeaders = listOf("*")
        allowedMethods = listOf("*")
        allowCredentials = true
    }
Run Code Online (Sandbox Code Playgroud)