會話技術分類
- cookie技術
會話資料儲存在浏覽器用戶端
- session技術
會話資料儲存在服務端
coolie技術
- 技術核心
cookie類(來自servlet):用于存儲會話資料
1.構造cookie對象:
2.設定Cookie
Cookie(java.lang.String name ,java.lang.String value)
cookie.setPath(/絕對路徑);void setPath(java.lang.String url)設定Cookie的有效通路路徑
void setMaxAge(int expiry)設定Cooike的有效時間
正整數:表示cookie資料儲存浏覽器的緩存目錄(硬碟中),數值表示儲存的時間
負整數:表示cookie資料儲存浏覽器的記憶體中,浏覽器關閉cookie就丢失
零:表示删除同名的cookie資料
3.發送Cookie到浏覽器端儲存void setValue(java.lang.String newValue)設定Cookie的值
void response.addCookie(Cookie cookie);
發送Cookie
4.伺服器接受Cookie
接受Cookie
Cookie request.getCookies();
- 小節
cookie可以儲存資料,但是cookie有條件限制,比如發送的内容隻能是非中文的資料
sesion技術核心
HttpSession類:用于儲存會話資料
- 建立或者得到session對象
HttpSession()
HttpSesion(boolean create)
- 設定session對象
void setmaxInactiveInterval(int interval):設定session有效時間
void invalidate():銷毀session
java.lang.String getId():得到session的編号
- 儲存會話的資料到session對象
void setAttribute(java.lang.String , java.lang.Object value):儲存資料
java.lang.Object getAttribute(java.lang.String name):擷取資料
void removeAttribute(java.lang.String name):清除資料
session原理
問題:伺服器能夠識别不同的浏覽者
前提:從那個session域對象儲存資料,就必須從哪個域對象取出
-
總結:
代碼解讀:
HttpSeeesion session = request.getSession();
- 建立session對象,給session對象配置設定一個唯一的ID,叫JSESSIONID
- 把JSESSIONID作為Cookie的值發送給浏覽器儲存
- 第二次通路的時候,浏覽器帶着JSESSSIONID的cookie通路伺服器
- 伺服器得到JSESSIONID,在伺服器的記憶體中搜尋是否存放對應的編号的session對象
- 如果找到對應編号的session對象,直接傳回該對象
-
如果找不到對應的編号session對象,建立新的session對象,繼續走1的流程
結論:通過JSESSION的cookie值在伺服器找session對象
session細節
-
java.lang.String getId():得到session的編号
- 兩個getSession方法
getSesstion(true)/getSession(): 建立或得到session對象。沒有比對的session編号,自動建立新的session對象
getSession(false):得到session對象。沒有比對的session編号,傳回null
- void setMaxInactivelnterval(int interval):設定session的有效時間
session對象的銷毀時間:
- 預設情況30分鐘伺服器自動回收
- 修改回收的時間(過期時間)機關:秒
修改回收的時間 session.setMaxInactiveInterval(20);
- 全局修改session有效時間
< !--修改session的有效時間:分鐘--><session-config> <session-timeout>1</session-timeout> </session-config>
- 手動去銷毀session的對象
void invalidate() 手動銷毀session對象
- 如何避免浏覽器的JSEEIONID的cookie随着浏覽器關閉而丢失的問題
/**
*手動發送一個硬碟儲存的cookie給浏覽器
*/
Cookie c = new Cookie("JCOOKIEID",session.getId());
c.setMaxAge(60*60); //儲存一小時
response.addCookie(c);
總結
- 會話管理:浏覽器和伺服器會話過程中的産生的會話資料管理
Cookie技術:new Cookie ("name","value")
response.addCookie(cookie);
request.getCookies()
Session 技術
request.getSession();
setAttribute("name","會話資料");
getAttribute("會話資料");