現在、アクティビティに関係なく、使用の 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 要求を発行すると、すぐに破棄されます。
以下も参照してください。