谷歌8.0版本之后無法攜帶cookie


前言

  谷歌最新版本更新之后,突然發現post請求就無法攜帶cookie了,導致原本可以用sessionId做的登錄驗證頻頻提示session過期,谷歌新版本的坑,導致我們排查了好久!

 

問題展示圖

 

 

  但是其他瀏覽器都正常

 

 

  多番查找資料,各種方法例如axios.defaults.withCredentials = true;//設置axios,要求請求必須攜帶cookie,這類方法都試了一遍,但是還是無法解決,最后參考了 https://blog.csdn.net/weixin_43990297/article/details/107716124,手動設置把谷歌默認對cookie的限制關了,再重啟瀏覽器,就可以獲取cookie了,真的巨坑!

  首先如果你用axios,那么先設置withCredentials為true,然后打開谷歌瀏覽器在Chrome中訪問chrome://flags/,搜索SameSite並設置為disabled即可。原因是Chrome升級到80版本之后cookie的SameSite屬性默認值由None變為Default,這也就造成了一些訪問跨域cookie無法攜帶的問題!

  最終還是拿到cookie.

 

 

*官方推薦的解決方式

  

  官方提示:

    設置了與http://192.168.4.168/的跨站點資源相關聯的cookie,但沒有設置' SameSite '屬性。在未來的Chrome版本中,只有當cookie設置為“SameSite=None”和“Secure”時,才會提供跨站點請求的cookie。你可以在開發者工具下的應用>存儲> cookie查看更多細節https://www.chromestatus.com/feature/5088147346030592和https://www.chromestatus.com/feature/5633521622188032。

 

  就是通過在后端中設置response.setHeader(“Set-Cookie”, “widget_session=abc123; SameSite=None; Secure”),即可允許第三方cookie使用,具體可以參考: https://blog.csdn.net/weixin_44269886/article/details/102459425

 

總結

  存在即合理,SameSite的設計初衷是為了防止CSRF攻擊,大家看到就谷歌而言就得設置,如果以后其他瀏覽器也禁止cookie呢?或者用戶手動禁止cookie?所以我很早之前都跟其他人說過不要用cookie!不要用cookie!本地數據存儲sessionStorage和localStorage不香?這次項目之所以要用cookie完全是后台為了確認第一次登陸輸入賬戶密碼和第二次輸入軟token驗證是同一用戶,於是我建議改成人工手動生成SessionId在該用戶登陸輸入密碼時在response內返回(獲取需要后端授權),然后第二次驗證時前端再把該SessionId傳回去(在請求頭放入),就確保兩次登陸是同一用戶在同一個設備!

  大家切記項目中遇到困難不要死揪着不放,要懂得繞彎,一個方法不行就另尋他路。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM