關於解決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 協議發送),否則無效。