1. 程式人生 > >【Java】【web】session學習總結 2018-9-28

【Java】【web】session學習總結 2018-9-28

session學習總結

Session概念:

​ Session是伺服器端技術,利用這個技術,伺服器在執行時可以為每一個使用者的瀏覽器建立一個其獨享的session物件,由於session為使用者瀏覽器獨享,所以使用者在訪問伺服器的web資源時,可以把各自的資料放在各自的session中,當用戶再去訪問伺服器中的其它web資源時,其它web資源再從使用者各自的session中取出資料為使用者服務。

Session的操作:

  1. 建立和獲取Session物件. HttpSession session = request.getSession(true);如果當前請求中存在一個Session物件,就直接返回,如果不存在Session物件,就先建立一個再返回 HttpSession session = request.getSession(false);如果當前請求中存在一個Session物件,就直接返回,如果不存在Session物件,就返回null. HttpSession session = request.getSession();等價於HttpSession session = request.getSession(true);

  2. 往Session中儲存資料. session物件.setAttribute(String name,Object value);

  3. 從Session中取出資料. Object value = session物件.getAttribute(String key);

  4. 刪除Session(使用者登出登陸). ​ 1):刪除Session中指定屬性名的值. ​ session物件.removeAttrbute(“currentName”); ​ 2):銷燬Session物件(Session中所有的屬性都不存在). ​ session物件.invalidate();

  5. Session的超時管理

    在超時時間之內,如果客戶端和服務端沒有互動(使用者的兩次操作之間不能超過該時間),則自動的銷燬Session.

    session物件.setMaxInactiveInterval(60 * 10);//超過10分鐘,銷燬Session.

    Tomcat伺服器的預設超時時間為:30分鐘,Tomcat一般在20多分鐘就銷燬了.

  6. URL重寫.

    Session是一種特殊的Cookie,而瀏覽器可以禁用Cookie.

    此時,需要在每一個資源之後,手動的攜帶session的ID.

    /session/list;jsessionid=872870F9466CE7B3A11FD3B768FDD684

    String url = response.encodeURL("/session/list");自動的在資源之後拼接;jsessionid=872870F9466CE7B3A11FD3B768FDD684

    • 注意:開發中都不會取消接受Cookie的.

Session的細節:

  1. 一般的,我們儲存到Session中的屬性名稱,要唯一,我們習慣XXX_IN_SESSION: ​ session物件.setAttribute(“USER_IN_SESSION”,“will”);
  2. 若需要把多個數據存放到Session中,就得呼叫setAttribute方法N次,可以的. ​ 一般的,我們把需要儲存的資料,封裝成一個物件,然後在儲存到Session中. ​ 把使用者的資訊,封裝到user物件. ​ session物件.setAttribute(“USER_IN_SESSION”,user物件);
  3. 如果多臺伺服器之間需要共享Session,此時Session中的物件,必須實現java.io.Serializable(才能在網路上傳輸). ​ 序 列 化: 把物件資訊儲存為二進位制. ​ 反序列化: 把二進位制資訊恢復成物件. ​ public class User implements java.io.Serializable{…}