关于解决Chrome新版本中cookie跨域携带和samesite的问题处理

关于解决Chrome新版本中cookie跨域携带和samesite的问题处理

新版本处理方式如下

针对Chrome版本67及以上

注意,这个里面的SameSite不能设为null,设空的话,还是会走默认值Lax

其中,SameSite的值可以填3个:Strict,Lax,None.
缺省的值为Lax,而且当你设置其为空时,在新的Chrome中还是会给予默认值Lax.

3个模式的介绍

Strict

严格模式

Lax

宽松模式

None

可以在第三方环境中发送cookie
在这种模式下,必须同时启用Secure才行

Chrome版本(51~66)

在这些版本中,浏览器不接受SameSite=None.如果套用上面的代码会发现无法登录

解决方法1

	public static void setCookies(HttpServletResponse response, String name, String value, int selectExpires,
			boolean openbrowser) {
		ResponseCookie cookies = ResponseCookie.from(name, value) // key & value
				.httpOnly(true) // 禁止js读取
				.secure(true) // 在http下也传输
				.path("/") // path
				.maxAge(time(selectExpires)) // 1个小时候过期
				.sameSite("None") // 大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外
				.build();
		response.setHeader(HttpHeaders.SET_COOKIE, cookies.toString());
	}

 Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

posted @ 2020-09-09 14:43  JLCUI  阅读(2389)  评论(0编辑  收藏  举报