5

サーブレットを使用して Java Web ボード ゲームを構築しています。ユーザーが 30 秒間応答しない場合を知る必要があります。

session.setMaxInactiveInterval(30);

しかし、時間が終わったらサーバー側で知る必要があるので、このプレーヤーをかなり作ることができます.

プレーヤーが戻って何かをしようとすると、タイムアウトが発生し、サーバーで確認できます。

セッションがタイムアウトになったら、サーブレットでどのように知ることができますか?!

ありがとうございました。

4

3 に答える 3

18

インターフェイスを実装する必要がありHttpSessionListenerます。セッションが作成または破棄されると、通知イベントを受け取ります。特に、そのメソッドsessionDestroyed(HttpSessionEvent se)は、セッションが破棄されたときに呼び出されます。これは、タイムアウト期間が終了した後/セッションが無効になった後に発生します。呼び出しを介してセッションに保存されている情報を取得し、HttpSessionEvent#getSession()後でセッションで必要な調整を行うことができます。また、必ずセッション リスナーを に登録してくださいweb.xml

<listener>
    <listener-class>FQN of your sessin listener implementation</listener-class>
</listener>

最終的に無効化とセッション タイムアウトを区別したい場合は、リスナーで次の行を使用できます。

long now = new java.util.Date().getTime();
boolean timeout = (now - session.getLastAccessedTime()) >= ((long)session.getMaxInactiveInterval() * 1000L);
于 2013-03-05T12:44:08.497 に答える
1

結局、HttpSessionListener を使用して、setMaxInactiveInterval よりも大きな間隔でリフレッシュしました。

したがって、40 秒後の次の更新で、使用済みが 30 秒間何もしなかった場合、sessionDestroyed() に到達します。

ServletContext に到達するには、新しい ServletContext を作成する必要があることも重要です。

ServletContext servletContext=se.getSession().getServletContext();

ありがとうございました!

于 2013-03-05T14:24:24.283 に答える