序文 偶然、30 分の Tomcat セッション時間は、セッションが作成された後、30 分間のみ有効であることを意味するのではなく、30 分間アイドル状態になるとセッションが削除されることを意味することを発見しました。ソースコードをざっと見てみました。少し整理整頓しました。 注:アイドル時間とは、同じセッション内の 2 つのリクエスト間の間隔を指します。 セッション関連のクラス図
マネージャー関連クラス図 StandardManager と PersitentManager はどちらも Manager の実装ですが、Session オブジェクトを保存する方法が異なります。 スタンダードマネージャー 1. Tomcatが動作しているとき、セッションはメモリに保存されます 2. Tomcat がシャットダウンすると (突然のクラッシュではなく、通常のシャットダウン操作であることに注意してください)、セッションはディスクに書き込まれ、Tomcat の再起動後に再度ロードされます。 永続マネージャー 1. セッションは常にディスクに保存します。 マネージャーとコンテキストの関係 Tomcat では、コンテキストは Tomcat にデプロイされたアプリケーション (Webapp) です。各コンテキストには、アプリケーションのセッション情報を管理するための個別の Manager オブジェクトがあります。 マネージャーがセッションを保存する方法 Managerオブジェクトは、セッションオブジェクトを保存するためにMapを使用します。
/** * このマネージャーの現在アクティブなセッションのセット。キーは * セッション識別子。 */ 保護された Map<String, Session> sessions = 新しい ConcurrentHashMap<>(); リクエストがコンテキストに到着すると、リクエストに JSESSIONID Cookie が含まれている場合、マネージャーは関連付けられたセッション オブジェクトを見つけて、それをリクエスト オブジェクトに格納できます。 管理者の定期検査 Manager インターフェイスには backgroundProcess() メソッドがあり、これは名前が示すようにバックグラウンド処理です。 /** * このメソッドは、定期的にコンテキスト/コンテナによって呼び出されます。 * ベースで、マネージャーが実装できるようにします * セッションの期限切れなどの定期的なタスクを実行するメソッド。 */ パブリック void backgroundProcess(); 注: Container インターフェイスにもこのメソッドがあります。このメソッドは通常、コンテナーの起動時に backgroundProcess メソッドを実行するための追加のスレッドを開始します。 Context のこのメソッドが開始されると、Loader と Manager の backgroundProcess メソッドが実行されます。 このメソッドが何をするのか見てみましょう。 /** * {@inheritDoc} * <p> * {@link #processExpires()} への直接呼び出し */ @オーバーライド パブリック void backgroundProcess() { カウント = (カウント + 1) % プロセス有効期限頻度; if (count == 0) // チェック頻度に達したら、チェックを開始します processExpires(); } /** * 期限切れのセッションをすべて無効にします。 */ パブリックボイドプロセス期限切れ() { 長いtimeNow = System.currentTimeMillis(); セッション sessions[] = findSessions(); //すべてのセッションオブジェクトを取得します int expireHere = 0 ; //期限切れのセッションの数。この変数名に惑わされないでください if(log.isDebugEnabled()) log.debug("" + getName() + " の期限切れセッションを " + timeNow + " sessioncount " + sessions.length に開始します); (int i = 0; i < sessions.length; i++) { セッション[i]がnullの場合、セッション[i].isValid()がtrueになります。 ここで期限切れ++; } } 長いtimeEnd = System.currentTimeMillis(); if(log.isDebugEnabled()) //レコードを印刷 log.debug("期限切れセッションの終了 " + getName() + " processingTime " + (timeEnd - timeNow) + " 期限切れセッション: " + expireHere); 処理時間 += ( 終了時間 - 現在時間 ); } これを見て私と同じ疑問を抱く人も多いと思いますが、セッションを期限切れにする操作はなく、ステータスチェックのみ行われているようです。しかし、後で Session の isValid メソッドの実装を見て、すべて理解できました。 /** * このセッションの <code>isValid</code> フラグを返します。 */ @オーバーライド パブリックブール値isValid() { (これが有効である場合){ false を返します。 } if (this.expiring) { true を返します。 } ACTIVITY_CHECK && accessCount.get() > 0 の場合 { true を返します。 } //キーポイント //最大アイドル時間が設定されている場合は、 //このセッションのアイドル時間を取得して判断します //タイムアウトした場合は、expire操作を実行します if (maxInactiveInterval > 0) { 内部IdleTimeInternal() は、内部IdleTimeInternal() の次の値を返します。 (timeIdle >= maxInactiveInterval)の場合{ 有効期限が切れます(true); } } this.isValid を返します。 } 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: MYSQLクエリデータの結果に自動的に番号を付ける方法
>>: js は、州、市、地区の 3 段階の選択カスケードを実装します。
借財宝は最近人気が出ている携帯電話ローンソフトウェアプラットフォームです。知人同士の貸し借りが特徴で...
テーブル構造を編集するための MySQL の alter コマンドの使用。具体的な内容は以下のとおり...
1. まず、CSS3 のターゲット セレクターを使用し、a タグを使用して id セレクターを指定し...
この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...
目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...
目次CSS3 ボックスモデルa. CSS3 フィルターb. CSS3 calc関数c. CSS3 ト...
同僚から、MySQL データ型 DECIMAL(N,M) の N と M の意味を尋ねられました。言...
この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...
目次質問1: 小道具は具体的にどのように使用されますか?原理は何ですか?下を見る質問 2: 年齢に ...
目次序文成果を達成するコードCSSコードJSコードHTMLコードデモンストレーションのプロセス序文ク...
目次導入インストール1. マウントするフォルダを作成する2. イメージをプルする3. コンテナを作成...
相対パスの概念現在のファイルの場所を参照ポイントとして使用して、ターゲット ファイルへのパスを確立し...
目次シナリオ分析発達要約するシナリオ分析システムでは、1 つのモジュールに 3 つのサブモジュールが...
フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...
クイックリーディングSQL ステートメントを監視する必要があるのはなぜか、監視方法と監視手段について...