session的工作原理?


1、什么是 session
session 是瀏覽器和服務器會話過程中,服務器分配的一塊儲存空間。服務器默認為瀏覽器在cookie中設置 sessionid,瀏覽器在向服務器請求過程中傳輸 cookie 包含 sessionid ,服務器根據 sessionid 獲取出會話中存儲的信息。

由於 http 協議是無狀態的,即 http 請求一次連接一次,數據傳輸完畢,連接就斷開了,下次訪問需要重新連接。

通過 cookie 中的 sessionid 字段和服務器端的 session 關聯,可以確定會話的身份信息。

 

2、session 比 cookie 更安全
用戶信息可以通過加密存儲到 cookie,但是這樣做的安全性很差,瀏覽器的 cookie 的容易被其他程序獲取和篡改。使用 session 的意義在於 session 存儲在服務器,相對安全性更高。

 

3、session 的生命周期

  • 創建

瀏覽器訪問服務器的 servlet(jsp)時,服務器會自動創建 session,並把 sessionid 通過 cookie 返回到瀏覽器。

servlet 規范中,通過 request.getSession(true)  可以強制創建 session。

 

  • 銷毀

服務器會默認給 session 一個過期時間,即從該 session 的會話在有效時間內沒有再被訪問就會被設置過超時,需要重新建立會話。

如 tomcat 的默認會話超時時間為30分鍾。

會話超時時間是可以通過配置文件設置,如修改 web.xml 、server.xml 文件

1、web.xml 文件
 
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
 
 
 
2、server.xml 文件
 
<Context path="/demo" docBase="/demo" defaultSessionTimeOut="3600" 
isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>

 

調用 servlet api 手動設置 session 超時時間

request.getSession().setMaxInactiveInterval(60 * 30);//session 30分鍾失效

 

調用 servlet api 手動銷毀 session

request.getSession().invalidate();

 

4、注意事項
如果瀏覽器禁用 cookie,默認情況下 session 無法生效。可以通過url重載攜帶 sessionid 參數、把 sessionid 設置為 http 協議 header 設為其他自定義字段中,請求中始終攜帶。
當用戶量很大、 session 的失效時間很長,需要注意 session 的查找和存儲對服務器性能的影響。
web 容器可以設置 session 的鈍化(從內存持久化到文件) 和 活化(從文件讀到內存),提高性能。


原文鏈接
 


 

 


免責聲明!

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



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