セッションの作成と破棄

1871 ワード

セッションはいつ作成されますか?
一般的なエラーは、セッションがクライアントアクセス時に作成されると考えられていますが、サーバエンドプログラム(サーブレットなど)が呼び出されるまで

HttpServletRequest.getSession(true)  //false       Session 
のような文が作成されます.
したがってgetSessionメソッドを呼び出さなければsessionは作成されません.
Sessionを理解するには、まず、Sessionの破棄には2つの状況しかありません.
第一:sessionはsessionを呼び出した.invalidate()メソッド.2つ目は、セッションが指定したライフサイクル時間を超えた前後の2回のリクエストです.
Sessionのライフサイクルはwebで可能です.xml構成.デフォルト30分はwebです.xmlは次のように構成できます.

<session-config>
      <session-timeout>5</session-timeout>
</session-config>

ブラウザを閉じたときにセッションが破棄されていないことを証明するにはどうすればいいですか?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でリスナーを構成し、構成が完了したらテストを行うことができます.
ブラウザがシャットダウンするとこのリスナーのセッションDestroyedメソッドは実行されず、5分程度(パソコンはそれほど正確ではない)でセッションDestroyedがトリガーされます.もちろんブラウザを開くとセッションCreatedが自動的に呼び出されます.シャットダウン5分後にセッションDestroyedが自動的に呼び出され、getIDメソッドで同じセッションかどうかを判断できます.だからネット上で説明したブラウザセッションを閉じると消えてしまいます.実は正しくない.何の構成もない場合.ブラウザを閉じてから30分後にセッションが消えます.
私たちはこの概念を利用して何をすることができますか?最も典型的なのは、SessionListenerのsessionDestroyed手法を利用して、ユーザが正常に終了する時間を記録することである.ユーザがあるサイトにアクセスする際(現在の銀行サイトにはこの機能がある)にユーザの最後のログイン時間が表示される.この時間はどのように取得しますか.ここでは二つの状況に分かれている.
ユーザが「終了」ボタンを押すとよい.アクションにジャンプします.ユーザが終了する時刻を記録する.永続レイヤに格納します.
ユーザーが正常に終了していない場合、Sessionが構成されていない場合、デフォルトでは30分後にsessionDestroyedが呼び出されます.また、sessionDestroyedがビジネスロジックを呼び出して実現したい機能を完了するまで、ユーザーが終了する時間を取得することもできます.