天天看點

會話管理(session)

會話技術分類

  • cookie技術
會話資料儲存在浏覽器用戶端
  • session技術
會話資料儲存在服務端

coolie技術

  • 技術核心

cookie類(來自servlet):用于存儲會話資料

1.構造cookie對象:

Cookie(java.lang.String name ,java.lang.String value)

2.設定Cookie
void setPath(java.lang.String url)設定Cookie的有效通路路徑
           
cookie.setPath(/絕對路徑);
void setMaxAge(int expiry)設定Cooike的有效時間
           

正整數:表示cookie資料儲存浏覽器的緩存目錄(硬碟中),數值表示儲存的時間

負整數:表示cookie資料儲存浏覽器的記憶體中,浏覽器關閉cookie就丢失

零:表示删除同名的cookie資料

void setValue(java.lang.String newValue)設定Cookie的值
           
3.發送Cookie到浏覽器端儲存

void response.addCookie(Cookie cookie);

發送Cookie

4.伺服器接受Cookie

Cookie request.getCookies();

接受Cookie
  • 小節
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("會話資料");