Java Web会话管理
一.Cookie會話
cookie技術會話數據會保存在瀏覽器客戶端
cookie技術核心:
1.構造cookie對象
2.設置cookie:有效訪問時間(setMaxAge),有效訪問路徑(setPath),設置cookie的值(setValue)
3.發送cookie到客戶端保存:response.addCookie發送cookie
4.服務器接收cookie:request.getCookie()
Cookie原理:
?1)服務器創建cookie對象,把會話數據存儲到cookie對象中。new Cookie("name","value");
?2)? 服務器發送cookie信息到瀏覽器?response.addCookie(cookie);?舉例: set-cookie: name=eric? (隱藏發送了一個set-cookie名稱的響應頭)
?3)瀏覽器得到服務器發送的cookie,然后保存在瀏覽器端。
4)瀏覽器在下次訪問服務器時,會帶著cookie信息舉例: cookie: name=eric? (隱藏帶著一個叫cookie名稱的請求頭)
?5)服務器接收到瀏覽器帶來的cookie信息??request.getCookies();
Cookie的細節:
1)void setPath(java.lang.String uri)? ?:設置cookie的有效訪問路徑。有效路徑指的是cookie的有效路徑保存在哪里,那么瀏覽器在有效路徑下訪問服務器時就會帶著cookie信息,否則不帶cookie信息。
2)void setMaxAge(int expiry) : 設置cookie的有效時間。
? ? ? ? ?正整數:表示cookie數據保存瀏覽器的緩存目錄(硬盤中),數值表示保存的時間。
? ? ? ? ?負整數:表示cookie數據保存瀏覽器的內存中。瀏覽器關閉cookie就丟失了!!
? ? ? ? ?零:表示刪除同名的cookie數據
3)Cookie數據類型只能保存非中文字符串類型的。可以保存多個cookie,但是瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。
?
二.Session會話
HttpSession類,用于保存會話數據
1.創建或得到session對象
2.設置session對象? ??
void setMaxInactiveInterval(int interval):設置session的有效時間?
void invalidate():銷毀session對象??
java.lang.String getId()? : 得到session編號
3.保存會話數據到session對象中
void setAttribute(java.lang.String name, java.lang.Object value)? : 保存數據
java.lang.Object getAttribute(java.lang.String name)? : 獲取數據
void removeAttribute(java.lang.String name) : 清除數據?
Session原理”
問題: 服務器能夠識別不同的瀏覽者!!!
現象:
前提: 在哪個session域對象保存數據,就必須從哪個域對象取出!!!!
? ? ? ? ? ? ?瀏覽器1:(給s1分配一個唯一的標記:s001,把s001發送給瀏覽器)
? ? ? ? ? ? ?1)創建session對象,保存會話數據
? ? ? ? ? ? ? HttpSession session = request.getSession();?? --保存會話數據 s1
? ? ? ? ? ? ?瀏覽器1 的新窗口(帶著s001的標記到服務器查詢,s001->s1,返回s1)??
? ? ? ? ? ? ?1)得到session對象的會話數據
? ? ? ? ? ? ? ?HttpSession session = request.getSession();?? --可以取出? s1
?新的瀏覽器1:(沒有帶s001,不能返回s1)
? ? ? ? ? ? ? ? ? ? ? ?1)得到session對象的會話數據
? ? ? ? ? ? ? ? ? ? ? ? ? ? HttpSession session = request.getSession();?? --不可以取出? s2
? 瀏覽器2:(沒有帶s001,不能返回s1)
? ? ? ? ? ? ? ? ? ? ? ? ?1)得到session對象的會話數據
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?HttpSession session = request.getSession();? --不可以取出? s3
代碼解讀:HttpSession session = request.getSession();
1)第一次訪問創建session對象,給session對象分配一個唯一的ID,叫JSESSIONID
?????????????????????????????????????????????? new HttpSession();
? ? ? ? ? ? ? 2)把JSESSIONID作為Cookie的值發送給瀏覽器保存
? ? ? ? ? ? ? ? ? ? ? ? ?Cookie cookie = new Cookie("JSESSIONID", sessionID);
? ? ? ? ? ? ? ? ? ? ? ? ?response.addCookie(cookie);
? ? ? ? ? ? ? ?3)第二次訪問的時候,瀏覽器帶著JSESSIONID的cookie訪問服務器
? ? ? ? ? ? ? ?4)服務器得到JSESSIONID,在服務器的內存中搜索是否存放對應編號的session對象。
?????????????????????????????????????????????? if(找到){
??????????????????????????????????????????????????????? return map.get(sessionID);
?????????????????????????????????????????????? }
?????????????????????????????????????????????? Map<String,HttpSession>]
?
?
?????????????????????????????????????????????? <"s001", s1>
?????????????????????????????????????????????? <"s001,"s2>
? ? ? ? ? ? ? ? ?5)如果找到對應編號的session對象,直接返回該對象
? ? ? ? ? ? ? ? ?6)如果找不到對應編號的session對象,創建新的session對象,繼續走1的流程
轉載于:https://www.cnblogs.com/SoftwareBuilding/p/10294760.html
總結
以上是生活随笔為你收集整理的Java Web会话管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: h5离线缓存+sessionstroag
- 下一篇: Java Web 之Token+Cook