Session會話筆記,維護一個客戶端和伺服器之間關聯的一種技術

學JAVA的好人發表於2020-10-19

目錄

什麼是Session會話?

Session的一些方法

Session域資料的存取

Session生命週期控制

瀏覽器與Session關聯的技術內幕


  1. 什麼是Session會話?

    1. Session是一個HttpSession介面

    2. Session是會話,它是用來維護一個客戶端和伺服器之間關聯的一種技術

    3. 每個客戶端都有自己的一個Session會話

    4. Session會話中,我們經常用來儲存使用者登陸之後的資訊

  2. Session的一些方法

    1. request.getSession()

      1. 可用來建立和獲取Session

      2. 第一次呼叫是建立Session,之後再次呼叫就是獲取已經建立好的Session物件

    2. isNew()

      1. 用來判斷Session是不是新的(剛建立的)(不懂啥時候變舊)

      2. true:表示剛建立

      3. false:表示是獲取之前建立好的

    3. getId()

      1. 用來獲取會話的ID值

      2. 每個會話都有一個身份證號,也就是ID值,這個ID是唯一的

  3. Session域資料的存取

// 往Session中儲存資料
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    req.getSession().setAttribute("key1", "value1");
    resp.getWriter().write("已往Session中儲存了資料");
}
// 往Session中取出資料
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
     Object attribute = req.getSession().getAttribute("key1");
     resp.getWriter().write("從Session中獲取出的key1資料是" + attribute);
}
  1. Session生命週期控制

    1. Session的超時是指兩次請求的最長間隔時間(最長的不使用時間)

    2. Session存在於伺服器端

    3. 一些方法

      1. public void setMaxInactiveInterval(int interval)

        1. 設定Session的超時時間,超過指定的時長,Session就會銷燬

        2. 正值:設定Session的超時時長

        3. 負值:永不超時(極少使用)

      2. public int getMaxInactiveInterval()

        1. 獲取Session的超時時間

      3. public void invalidate()

        1. 讓當前Session會話馬上超時

    4. 時長的單位是:s(秒)

    5. Session預設的超時時長是30分鐘

      1. 在Tomcat伺服器的配置檔案web.xml中預設有以下的配置,它表示當前Tomcat伺服器下的所有Session超時配置預設為30分鐘

<session-config>
    <session-timeout>30</session-timeout>
</session-config>
  1. 修改整個工程的預設超時時長

    1. 在你web工程的web.xml配置檔案中做以上相同的配置,把30分鐘改為你想要的時間即可

  2. 修改個別Session的超時時長

    1. setMaxInactiveInterval(int interval) 方法:單獨設定超時時長

  3. 程式碼展示

    1. 建立和獲取Session

// 建立和獲取Session
protected void createOrGetSession(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    // 建立和獲取Session會話物件
    HttpSession session = req.getSession();
    // 判斷 當前Session會話,是否是新建立出來的
    boolean isNew = session.isNew();
    // 獲取Session會話的唯一標識 id
    String id = session.getId();

    resp.getWriter().write("得到的Session,它的id是:" + id + " <br /> ");
    resp.getWriter().write("這個Session是否是新建立的:" + isNew + " <br /> ");
}
  1. 往Session中儲存資料

// 往Session中儲存資料
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    req.getSession().setAttribute("key1", "value1");
    resp.getWriter().write("已往Session中儲存了資料");
}
  1. 往Session中取出資料

// 往Session中取出資料
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
     Object attribute = req.getSession().getAttribute("key1");
     resp.getWriter().write("從Session中獲取出的key1資料是" + attribute);
}
  1. 獲取Session預設的超時時長

// 獲取Session預設的超時時長
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    // 獲取Session的預設超時時長
    int maxInactiveInterval = req.getSession().getMaxInactiveInterval();

    resp.getWriter().write("Session的預設超時時長是:" + maxInactiveInterval + "秒");
}
  1. 設定超時時長為3秒

// 設定超時時長為30秒
protected void life3(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    // 1、先獲取Session物件
    HttpSession session = req.getSession();
    // 2、設定當前Session在30秒後超時
    session.setMaxInactiveInterval(30);

    resp.getWriter().write("當前Session已經設定30秒後超時");

}
  1. 設定馬上超時

// 設定馬上超時
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    // 1、先獲取Session物件
    HttpSession session = req.getSession();
    // 2、讓Session會話馬上超時
    session.invalidate();

    resp.getWriter().write("Session已經無效");

}
  1. 瀏覽器與Session關聯的技術內幕

    1. Session技術在底層是基於Cookie技術實現的

相關文章