問題提出
在開發中的登錄功能基本思路以下:html
- 前端請求驗證碼,後端生成一個驗證碼(保存在session中)並將其返回給前端,
- 前端用戶輸入帳號、密碼、驗證碼後將表單傳給後端,後端對比session中的驗證碼和用戶輸入的是否一致。
可是後端在第二步時,session中沒有存有以前生成的驗證碼,也就沒法對比用戶的驗證碼是否正常,致使系統一直沒法進入。前端
問題分析
首先須要考慮跨域問題,前端發送請求時要攜帶cookie,不然獲取驗證碼請求和登錄請求會建立兩次session,致使沒法取出上一次產生的驗證碼。打開開發者工具會發現請求頭中沒有cookie。 chrome
解決思路
在項目先後端中加入跨域代碼
https://www.jianshu.com/p/dc506490c796 // 前端案例 https://www.cnblogs.com/gcdd/p/12292415.html //後端案例
可是本項目在先後端已經加入了相關的代碼,仍是存在沒有cookie的現象。後端
瀏覽器層面問題
以前測試都是在chrome瀏覽器中進行的,換了火狐發現這個問題不復存在了,因此極可能是chrome瀏覽器的問題,通過百度發現chrome瀏覽器會存在session「丟失「問題。具體現象以下:跨域
https://www.jianshu.com/p/76d026cc4dd7 https://blog.csdn.net/fouling/article/details/108357824
因此將chrome瀏覽器的SameSite屬性關閉便可。 在瀏覽器輸入這個地址瀏覽器
chrome://flags/
而後將SameSite屬性設置爲Disabled便可解決問題。 cookie