1. 程式人生 > >Session的建立和銷燬

Session的建立和銷燬

session什麼時候被建立

一個常見的錯誤是以為 session 在有客戶端訪問時就被建立,然而事實是直到某 server 端程式(如 Servlet )呼叫

HttpServletRequest.getSession(true)  //false 不會自動建立Session 
這樣的語句時才會被建立。所以沒有呼叫getSession方法則不會建立session

要了解Session首先要知道一個概念:Session的銷燬只有兩種情況:

第一:session呼叫了 session.invalidate()方法。
第二:前後兩次請求超出了session指定的生命週期時間。

其中Session的生命週期時間可以在web.xml配置。預設30分鐘 在web.xml可以做如下配置:
<session-config>
      <session-timeout>5</session-timeout>
</session-config>

     如何來證明關閉瀏覽器的時候Session沒有銷燬呢?  我們可以建立一個SessionListener 此監聽器專門用來監聽Session的生命週期的.程式碼如下:


// 新建一個session時觸發此操作  
    public void sessionCreated(HttpSessionEvent se) {   
        System.out.println(se.getSession().getId());  
    }  
  
    // 銷燬一個session時觸發此操作  
    public void sessionDestroyed(HttpSessionEvent se) {  
       System.out.println(se.getSession().getId()); 
    }  


   別忘記在web.xml中配置監聽器, 配置完畢後 可以做個測試。當瀏覽器關閉後此監聽器的 sessionDestroyed方法並沒有執行,而是在5分鐘左右(個人電腦沒有那麼精確) 才會觸發sessionDestroyed ,當然 再開啟瀏覽器的時候 sessionCreated 會自動呼叫 關閉5分鐘後sessionDestroyed 又會自動呼叫, 通過getID方法大家可以判斷是否為同一個Session. 所以網上說明的關閉瀏覽器Session就消失.其實並不正確。如果沒有任何配置的情況下. 關閉瀏覽器30分鐘後Session才會消失的。
   我們可以利用這個概念做什麼呢? 最典型的就是利用 SessionListener  的sessionDestroyed方法 來記錄使用者非正常退出的時間. 使用者在訪問某個網站的時候(目前的銀行網站都有此功能) 顯示了使用者的最後登入時間. 此時間如何獲取. 在這裡分兩種情況
   如果使用者按"退出" 按鈕那就好說了. 跳轉到action中.記錄下使用者退出的時間. 儲存到持久層中。
   如果使用者非正常退出, 在沒有配置Session的情況下 預設會在30分鐘後呼叫sessionDestroyed 那麼我們同樣可以在此獲取使用者退出的時間,在sessionDestroyed 呼叫業務邏輯完成我們想要實現的功能。

相關推薦

實現HttpSessionListener介面完成獲取建立銷燬session的時間

package com.starry.listenter; import java.util.Date; import javax.servlet.http.HttpSession; impor

jsp,el表示式,會話管理,cookie,session技術,session建立銷燬/清空購物車

第一部分:jsp入門和el表示式入門 1、jsp的入門 1.1 什麼是jsp: (1)sun公司用於動態網站開發技術 servlet ,因為使用servlet如果向頁面輸出內容很麻煩, 有了jsp,使用jsp向頁面輸出內容很方便,jsp就是servl

【監聽器篇】1.監聽request、ServletContext 、session物件的建立銷燬

1.監聽器知識點  簡單來說,監聽器是監聽一個物件發生的什麼事,然後監聽器做出相應的反應。這就是我們的監聽器,用我們專業的話來說:監聽器負責監聽事件源的事件。  事件源:發生事件的源頭,監聽器需要監聽的物件。  事件:事件源上發生的動作,監聽器監聽的內容。  監聽器:負責監聽

Session建立銷燬

session什麼時候被建立 一個常見的錯誤是以為 session 在有客戶端訪問時就被建立,然而事實是直到某 server 端程式(如 Servlet )呼叫 HttpServletRequest.getSession(true) //false 不會自動建立Sessi

《Effect Java》第二章"建立銷燬物件”筆記

第一條:考慮用靜態工廠方法代替構造器 首先要指明一個誤區:靜態工廠方法不是指的設計模式裡面的工廠方法,他是指以靜態方法的形式建立物件(工廠就是用來建立物件的),例如: public static User createNormalUser(){ return new

JavaWeb監聽器(實現監聽器步驟,域物件的建立銷燬,域物件的屬性變更)

在WEB中監聽器的監聽物件也就是針對域物件【application/session/request/pageContext(不用)】的建立、銷燬以及域物件屬性物件的新增、移除。 監聽三個域物件的建立和銷燬的監聽器        ( 型別名Listene

Vue巢狀元件建立銷燬的順序

       理解生命週期和鉤子函式的呼叫在工程中十分重要,關於Vue生命週期的理解我推薦這一遍詳解Vue生命週期 。寫得真不錯,淺顯易懂,任何初學者一看都能明白是怎麼一回事。今天我當然不是來講生命週期的,我要將的是巢狀元件的建立順序,巢狀

函式的呼叫過程詳解———棧幀的建立銷燬

●回顧內容: 函式的定義:函式是一個程式中的部分程式碼,由一個或多個語句組成,它的功能是實現某些特定的任務。函式相對於其他程式碼來說具備相對的獨立性。 函式的呼叫:在某個函式內部,使用另一個函式來完成相關的任務,這個過程叫做函式呼叫。 那麼函式是如何呼叫的呢?分析一段簡單的程式碼:

Effective Java (3rd Editin) 讀書筆記:1 建立銷燬物件

1 建立和銷燬物件 Item 1:考慮用靜態工廠方法取代構造器 public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); } 靜態工廠方法的優點: 有名

監聽域物件建立銷燬的Listener

1.什麼是Servlet監聽器? 先來看看什麼是監聽器。監聽器是專門用於對其它物件身上發生的事件或狀態改變進行監聽和相應處理的物件,當被監視的物件發生情況時立即採取相應的行動。Servlet監聽器是Servlet規範中定義的一種特殊類,它用於監聽web應用程式的ServletContext,HttpSess

effective java中文版 第二章 建立銷燬物件

第1條:考慮用靜態工廠方法替代構造器 如下方法將boolean基本型別值轉換為了一個Boolean物件引用 public static Boolean valueOf(boolean b){ return b ?Boolean.TRUE:Boolean.FALSE; } 靜態

spring框架中工廠方法的建立銷燬

1.編寫介面UserSerivce: public interface UserService { public void sayHello(); } 2.編寫實實現介面的方法,在該方法中除了要實現介面中的方法,還定義了inti和destory方法: public class

java程式碼優化(一)——建立銷燬物件

用靜態工廠方法代替構造器 準備知識 自動裝箱:從基本資料型別轉換成包裝型別。 自動拆箱:從包裝型別轉換成基本資料型別。 包裝類: number(數字型別) Byte(byte) Short(short) Integer(int) Long(long) Dou

newdelete建立銷燬二維陣列

int** new_arry(int row, int col) {//建立arry【row】【col】 int**arry = (int**)new int*[row]; for (int i = 0;i < row;i++) { arry[i

《effective java》讀書筆記1(建立銷燬物件)

第1條:考慮用靜態工廠方法代替構造器 1.what is? 此處的靜態工廠方法與設計模式中的工廠模式不一樣。 比如類 class Person{ //A的構造器 public A(){}; //A的靜態工廠方法可以

Cocos Creator 建立銷燬節點(摘自官方文件)

建立新節點 除了通過場景編輯器建立節點外,我們也可以在指令碼中動態建立節點。通過 new cc.Node() 並將它加入 到場景中,可以實現整個建立過程。 以下是一個簡單的例子: cc.Class({ extends: cc.Component, prope

JavaWeb_監聽域物件建立銷燬的Listener1一d物件

1簡介 監聽器:專門用於對其他物件身上發生的事件或狀態改變進行監聽和相應處理的物件,當被見識的物件發生情況時,立即採取相應的行動。 Servlet監聽器:Servlet規範中定義的一種特殊類,它用於監

函式的呼叫,棧幀的建立銷燬

一、什麼是棧幀?      在進行函式的呼叫(棧幀)的分析前,我們先了解下 main 函式的呼叫吧,通過以前的學習,我們知道 main 函式也是被呼叫的,先在  __tmainCRTStartup  函式中呼叫,而 __tmainCRTStartup 函式是在 ma

Effective Java 讀書筆記(一):建立銷燬物件

1 構造器 => 靜態工廠方法 (1)優勢 靜態工廠方法有名字 靜態工廠方法不必在每次被呼叫時都產生一個新的物件 靜態工廠方法能返回原返回型別的任意子型別的物件 靜態工廠方法根據呼叫時傳入的不同引數而返回不同類的物件 靜態工廠方法返回物件的類不需要存在(SPI架構) (2

effective java 第2章 建立銷燬物件筆記

第一條:考慮用靜態工廠方法替代構造器 靜態工廠方法的優點: 1.具有名字,有可閱讀性。 2.不必在每次呼叫他們的時候都建立一個新物件。 應用:①單例物件 ②列舉 3.可以返回返回值型別的任何子型別的物件。 應用: ①EnumSet的靜態工廠方法根據元素的個數選擇返回Reg