0

Play Framework 2.1.2 アプリケーションがあり、ユーザーがログアウトまたはブラウザを閉じた後に、クリーンアップ手順を実行する必要があります。私の他の質問で、終了アクションをインターセプトする方法を尋ねたところ、ブラウザーで JavaScript を使用するのは信頼できないと言われたため、サーバー側のセッション タイムアウト イベントを使用して、ユーザーがいなくなったことを確認したいと思います。

したがって、取得したいフローは次のようになります。

  1. ユーザーがログインする
  2. そのセッションが作成されます
  3. ユーザーは私の Web アプリケーションで作業します
  4. ユーザーがログアウトするかブラウザを閉じる ---> セッションが期限切れになる
  5. 彼はもうプラットフォームにいないので、彼が行ったことについてデータベースでいくつかの操作を実行できます

セッションの有効期限が切れたときにオーバーライドする方法が見つかりませんでした。誰かが私に解決策を教えてもらえますか?

最終的には、別の許容可能な解決策は、接続されなくなったユーザーを繰り返しチェックし、接続されなくなったユーザーのプールに対して一括操作を実行する時間指定イベントです。これを達成する方法は?

4

1 に答える 1

2

セッションのタイムアウトも必要だったので、セッションにタイムスタンプ (ティック) を追加し、タイムアウトを確認した後、リクエストごとに更新しました。

このようなもの:

// see if the session is expired
String previousTick = session("userTime");
if (previousTick != null && !previousTick.equals("")) {
  long previousT = Long.valueOf(previousTick);
  long currentT = new Date().getTime();
  long timeout = Long.valueOf(Play.application().configuration().getString("sessionTimeout")) * 1000 * 60;
  if ((currentT - previousT) > timeout) {
    // session expired
    session().clear();
    return null;
  } 
}
// update time in session
String tickString = Long.toString(new Date().getTime());
session("userTime", tickString);

http://www.poornerd.com/2014/04/01/how-to-implement-a-session-timeout-in-play-framework-2/

于 2014-04-01T19:52:44.083 に答える