javaWeb中的session


什么是sesson?

服務器會為每個瀏覽器 創建單獨Session對象,Session對象用來保存與對應瀏覽器相關會話數據 

session和cookie的區別?

Session和Cookie 相比,Cookie 數據保存客戶端,Session數據保存服務器端
Cookie 好處:保存客戶端,不占用服務器資源 (記住用戶名密碼、上次訪問時間 、商品瀏覽記錄 ...) 缺點:安全性
Session 好處:數據保存服務器端,更加安全 ,缺點:占用服務器資源,當Session數據非常多時,服務器壓力非常大

Session原理

1、當客戶端訪問服務器,第一次 request.getSession() API得到執行,隨機創建Session對象,為對象創建唯一編號 id
2、服務器會將創建Session 的編號 id 以Cookie形式 發送給客戶端
3、客戶端接收 session的編號,保存起來(會話級別、持久級別)
4、客戶端下次訪問服務器,因為cookie中含有session的id ,會自動攜帶session的id
5、服務器端,從cookie中獲得session的id,並且request.getSession()時,根據session的id查找到服務器端對應Session對象

 

關閉瀏覽器再打開,Session中數據還在不在?

cookie持久的,獲得之前session的id ---- 找到相應信息
cookie是會話級別,關閉瀏覽器后丟掉 session的id ,服務器端session數據還在,但是找不到信息
***瀏覽器關閉 與Session存在無關 ,關閉瀏覽器只是丟失保存在cookie中 session的id

*** 手動設置jsessionid持久化
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);
cookie.setPath("/day7");
response.addCookie(cookie);

Session生命周期 :
1、創建 :request.getSession() (沒有jsessionid找不到對應Session)
2、失效 :
(1) 服務器正常關閉,重啟后,session數據還有,中止服務器,啟動,session數據丟失
** 正常關閉服務器,session中數據會被序列化到 tomcat/work 目錄,重啟后重新加載
(2) 自動過期 ,當session持續一段時間沒有使用,服務器就會自動刪除session對象
tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
默認session過期時間 30分鍾

API 進行設置 session.setMaxInactiveInterval(int interval) 單位秒

(3) 手動銷毀session ---- session.invalidate() 銷毀當前session對象,清除里面所有數據

 

禁用cookie?

如果客戶端禁用cookie,會怎么樣 ?服務器Session對象還是存在的 ,客戶端無法找到Session
*** cookie 禁用解決 ,在url地址上 拼接jsessionid
http://localhost/day7/session/cart.jsp;jsessionid=5509175E258A27EBAA3BF972E5D309EF (分號 ; 不是 ?)

使用response 提供現成API : encodeURL
*** 禁用cookie 使用所有url 必須都進行重寫,只要有一個沒重寫,session丟失 ,無法獲得丟失session的數據

 


免責聲明!

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



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