1. 程式人生 > >Session的建立與銷燬時機

Session的建立與銷燬時機

  • 客戶端第一次訪問jsp檔案,jsp被翻譯成Servlet時會自動建立Session,此後客戶端再次訪問就會帶著JSESSIONID過來。
  • 當客戶端重啟瀏覽器時,客戶端的JSESSIONID被銷燬(此時服務端的Session沒有受影響),客戶端再次訪問瀏覽器沒有帶著JSESSIONID,服務端將再次為客戶建立Session。
  • 在jsp檔案page指令裡設定session="false",客戶端訪問此jsp將不會建立Session。
  • 客戶端訪問Servlet時不會建立Session,只有在通過request.getSession()或是跳轉到jsp檔案時才建立Session。

tomcat預設session超時時間為30分鐘,可以根據需要修改,負數或0為不限制session失效時間。這裡要注意這個session設定的時間是根據伺服器來計算的,而不是客戶端。所以如果在除錯程式,應該是修改伺服器端時間來測試,而不是客戶端。

<session-config>
<session-timeout>30</session-timeout>
</session-config>

通過Java程式碼設定

session.setMaxInactiveInterval(30*60); // 以秒為單位,即在沒有活動30分鐘後,session將失效

伺服器端呼叫了HttpSession的invalidate()方法。

退出銷燬session的Action方法
  /**
     * 使用者退出的方法
     */
    public String quit(){
        // 銷燬session
        ServletActionContext.getRequest().getSession().invalidate();
        return "quit";
    }

 

注意!如果伺服器正常關閉不會銷燬

伺服器正常關閉不銷燬session,()session會存到我們的硬碟中,也就是我們正常的點選stop server()會在tomcat的work的Catalina\localhost\專案名稱下面生成一個檔案SESSIONS(執行序列化),當伺服器再次啟動的時候會載入此檔案(反序列化),倘若沒有實現序列化介面(Serializable)可能會報錯因為序列化和反序列化會依據一個id:

private static final long serialVersionUID = 1L;