【Web】Tomcat中利用Session識別用戶的基本原理


HTTP無狀態的特性與Session、Cookie的存在

HTTP有一個特性:無狀態的,就是前后兩個HTTP事務它們並不知道對方的信息。
而為了維護會話信息或用戶信息,一般可用Cookie或Session技術緩存信息。

  • Cookie是存儲在客戶端的
  • Session是存儲在服務端的

如何生成session id?如何根據session id獲取session?如何生成session?

客戶端請求服務器時,如果請求的服務涉及Session的訪問,比如調用request.getSession()request.getSession(true)(其實此兩句代碼功能相同),如果請求中包含session id,則從ConcurrentHashMap<String, Session>中獲取session,如果不包含session id,則會生成一個新的不沖突的session id

比較詳細的流程,可見org.apache.catalina.connector.Request.doGetSession(boolean create)

而具體的創建Session的流程,可見org.apache.catalina.session.ManagerBase.createSession(String sessionId)

session id如何進行傳輸

session id是如何進行傳輸的呢?一般是通過CookieRequestResponse在客戶端和服務端間通訊。在Cookie禁用情況下,也可由URL參數的形式進行通訊。有哪幾種方式,有個泛型作了列舉javax.servlet.SessionTrackingMode
Session通過session id進行識別用戶,那么session id被外人獲取從而偽裝身份,此為Session卻持,需要注意。

參考的文章

Tomcat中的Session小結


免責聲明!

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



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