解決SessionId不一致的問題


前言

  公司的項目后端的邏輯不知道怎么寫的,在兩個月前的三個環境測試中都可以正常獲取sessionId並成功登陸和到期后自動提示,但是這次這個月后端邏輯更新之后就導致sessionId每次獲取的不一致導致前端總是無法登陸導致提示SessionId過期:

   后端解決不了問題就一直堅持是vue框架的問題導致不一致,因為vue的框架的axios每次發送非簡單請求(not-simple-request)就會先發一次OPTIONS請求,我心里也是汗顏!如果真是框架的問題,那么兩個月前就登陸不上了,而且HTTP的OPTIONS方法用於獲取目的資源所支持的通信,在正式跨域之前,瀏覽器會進行一次預檢(也就是option請求),用來讓服務端返回允許的方法(get、post等),被跨域訪問的origin(來源或者域),還有是否需要Credentials(認證信息)等。

 

解決

  把request.getSession()改為request.getSession(false)即可解決,原因在於request.getSession()獲取不到session就會創建一個新的session,導致兩次session不一致,而request.getSession(false)獲取不到就返回null,此時判斷為null的情況即可。

 

request.getSession()

  在JavaWeb項目中,request.getSession()一般是用來存儲當前用戶對象到session中,或從session中獲取當前用戶對象。

  建議以后向Session中存儲登錄信息時,一般使用:HttpSession session = request.getSession();

  當從Session中獲取登錄信息時,就使用:HttpSession session = request.getSession(false);

 

總結

  遇到問題冷靜分析,切記冷靜,冷靜,不要像我一樣和同事起了口角,等到大家冷靜下來之后見面覺得好尷尬!

  此外分享一篇關於vue中axios發送OPTIONS預檢請求的原因及如何通過https://blog.csdn.net/gu_wen_jie/article/details/84172410

 


免責聲明!

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



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