3

ユーザーがアクティブかどうかを確認する定期的なセッションで、すべてのユーザーに対して機能を実行したいと考えています。アクティブでない場合、関数はサーブレット コンテキスト内のユーザーのリストからユーザーを削除し、ユーザー セッションをクリアします。

各ユーザーに対して一定の時間間隔で関数を実行するには、何を使用できますか?

私が理解していることから、servletcontextlistener は、各ユーザーではなく、サーブレットの存続期間中に 1 回しか実行されないため、使用できません。また、サーブレットではスレッドを使用しないことをお勧めします。

編集: ユーザー (ajax を使用) は、ユーザーごとに保存した変数を更新する関数を含むアクションを呼び出します。これは、サーバーに最後に接続した時間を示します。

4

2 に答える 2

2

あなたはおそらく探していjavax.servlet.http.HttpSessionListenerます。作成して登録し、作業を依頼しweb.xmlsessionDestroyedください。

于 2012-04-11T03:40:00.767 に答える
1

頭のてっぺんから考えることができる2つの方法:

  1. request.getSession().setMaxInactiveInterval(someValue) を使用します

  2. ajax を使用しているため、「ユーザー アクティビティ」の値を送信する代わりに、実際の「セッションの終了」リクエストを送信することもできます。これは、ユーザーがアクティブかどうかのロジックがクライアント側にあり、実際の「セッション キル」ロジックがバックエンドにあるため、http 呼び出しが少なくなることを意味します。したがって、シナリオは次のとおりです。

    Javascript コードが毎分実行され、ユーザーがアクティブかどうかを確認します (実際に何を見ているのかはわかりませんが、それは別の話です)。たとえば、5 分後にユーザーがクライアント側で何もしなかった場合、セッションを強制終了するために ajax 呼び出しがバックエンドに送信されます。

于 2012-04-11T03:53:41.517 に答える