64

JavaでHttpSessionをタイムアウトしようとしています。私のコンテナはWebLogicです。

現在、次のようにweb.xmlファイル でセッションタイムアウトが設定されています

<session-config>
    <session-timeout>15</session-timeout>
</session-config>

さて、これにより、アクティビティに関係なく、使用の15分でセッションが終了する(またはすべてのセッションですか?)と言われています。

このアプローチが正しいのか、それともプログラムで非アクティブの時間制限を次のように設定する必要があるのか​​疑問に思います。

session.setMaxInactiveInterval(15 * 60); //15 minutes

15分間すべてのセッションをドロップするのではなく、15分間非アクティブになっているセッションのみをドロップします。

これらの方法は同等ですか?web.xml構成を優先する必要がありますか?

4

2 に答える 2

123

現在、アクティビティに関係なく、使用の 15 分後にセッション (またはすべてのセッションですか?) が終了すると言われています。

これは間違っています。関連付けられたクライアント (Web ブラウザー) が Web サイトに 15 分以上アクセスしていない場合、セッションを強制終了します。これを解決しようとするあなたの試みを見て、最初に予想したとおり、アクティビティは確かにカウントされます。

ちなみにここHttpSession#setMaxInactiveInterval()はあまり変わりません。とまったく同じ<session-timeout>ですweb.xmlが、実行時にプログラムで変更/設定できるという唯一の違いがあります。ちなみに、変更は現在のセッション インスタンスにのみ影響し、グローバルには影響しません (それ以外の場合はstaticメソッドでした)。


これを自分で試して体験するには<session-timeout>、1 分に設定して次のHttpSessionListenerようなものを作成してみてください。

@WebListener
public class HttpSessionChecker implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date());
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date());
    }

}

(まだ Servlet 3.0 を使用していないため を使用できない場合は、次のよう@WebListenerに登録しweb.xmlます) :

<listener>
    <listener-class>com.example.HttpSessionChecker</listener-class>
</listener>

servletcontainer は、正確にタイムアウト値が経過した後、すぐにセッションを破棄しないことに注意してください。これは、特定の間隔で実行されるバックグラウンド ジョブです (たとえば、負荷とサーブレット コンテナーのメーカー/タイプに応じて 5 ~ 15 分)。destroyedしたがって、非アクティブ状態がちょうど 1 分間続いた直後に、コンソールに行が表示されなくても驚かないでください。ただし、タイムアウトしたがまだ破棄されていないセッションで HTTP 要求を発行すると、すぐに破棄されます。

以下も参照してください。

于 2010-06-25T15:04:26.450 に答える
13

現在、アクティビティに関係なく、使用の 15 分後にセッション (またはすべてのセッションですか?) が終了すると言われています。

いいえ、そうではありません。はsession-timeout、非アクティブの場合のセッションごとのタイムアウトを設定します。

これらの方法は同等ですか?web.xml 構成を優先する必要がありますか?

web.xml の設定はグローバルで、特定のコンテキストのすべてのセッションに適用されます。プログラムで、特定のセッションに対してこれを変更できます。

于 2010-06-25T15:09:50.353 に答える