0


Cookie-SameSite属性 前端请求不带cookie的问题解决方案

最近遇到了前端请求后端不带cookie的问题,

请求时header里面就是没有cookie
查看响应应该是这个问题

在这里插入图片描述

SameSite是一个cookie属性,用于控制浏览器是否在跨站点请求中发送cookie。它有三个可能的值:

1. Strict(严格模式)

在严格模式下,浏览器将不会在跨站点请求中发送cookie。这意味着这些cookie将仅用于同站点请求。这是默认设置。

2. Lax(宽松模式)

在宽松模式下,浏览器将仅在跨站点POST请求(例如表单提交)中发送cookie。任何跨站点请求(包括GET请求)都不会发送cookie。这可以提供一定程度的保护,同时允许一些常见的用例。

3. None(无限制模式)

在无限制模式下,浏览器将在所有跨站点请求中发送cookie。这是因为cookie的SameSite属性默认为Strict,需要明确设置为None来允许跨站点请求发送cookie。

SameSite属性的目的是防止跨站点请求伪造(CSRF)攻击。通过限制哪些请求可以发送cookie,可以减少攻击者对用户身份验证的滥用。

需要注意的是,SameSite属性对于旧版本的浏览器可能不起作用,因此应该采取其他措施来防止CSRF攻击。此外,SameSite属性也不会提供完全的保护,只能作为一种额外的安全层。

设置SameSite

// 设置Cookie的SameSite属性为None,并启用Secure标志Cookie cookie =newCookie("JSESSIONID", request.getSession().getId());
    cookie.setPath("/");
    cookie.setHttpOnly(true);// 保持HttpOnly属性以增强安全性
    cookie.setSecure(true);// 必须在HTTPS环境下设置为true,因为SameSite=None要求安全上下文
    cookie.setSameSite(Cookie.SameSite.NONE.getValue());// 设置SameSite为None,注意这需要Servlet 5.0+支持

但是无法使用

Cookie

中的方法

setSameSite

我正在使用的Java Servlet API版本不支持直接设置SameSite属性。Cookie.setSameSite()方法是在Servlet 5.0规范中引入的。如果你的项目依赖于早期版本的Servlet API,无法直接调用这个方法。

手动设置响应头来实现SameSite=None,同时确保设置Secure标志,因为大多数浏览器在SameSite=None时要求使用HTTPS。

在后端拦截器中加入下面代码显式配置响应头

String sessionID = request.getSession().getId();
response.setHeader("Set-Cookie",String.format("JSESSIONID=%s; Path=/; Secure; HttpOnly; SameSite=None", sessionID));

前端请求头成功携带cookie

标签: 前端 java spring boot

本文转载自: https://blog.csdn.net/W9940/article/details/139721377
版权归原作者 一岁就可帅- 所有, 如有侵权,请联系我们删除。

“Cookie-SameSite属性 前端请求不带cookie的问题解决方案”的评论:

还没有评论