0

ユーザーがアプリケーションにログインするたびに、loginStatus をそのユーザーのデータベースに "LoggedIn" として保存しています (したがって、異なるコンピューターから複数のログインを行うことはできません)。

それは私にとってはうまくいきますが、1つのシナリオでは問題に直面しています。

ユーザーが自分の PC を離れて立ち去ると、別の PC からログインしようとします。しかし、db の彼の loginStatus はまだ「loggedIn」です。そのため、他の PC (以前にログインしていた場所) に移動してログアウトしない限り、他の PC からログインすることはできません。

とにかく、私はこれを処理できます。理想的には、ユーザーが他の場所から試行しようとしたときに、以前の PC/ブラウザーから自動的にユーザーをログアウトする方法があれば.

ユーザーが LOGOUT リンクをクリックすると、セッションが無効になり、db も呼び出されたときにこのメソッドを呼び出します。私が望むのは、このメソッドを呼び出すことです。ブラウザを閉じます (LogginOut なし)

          public String logOut() throws Exception {
    System.out.println("inside server");
    User user = (User) session.getAttribute("user");
    logoutFromDb(user);// call to db
    session=getThreadLocalRequest().getSession(true);
    session.invalidate();
    System.out.println("invalidated");

これを試す

           DateTime lastAccessedTime = new DateTime(session.getLastAccessedTime());
    DateTime currentTime = new DateTime();
    Minutes diff =  Minutes.minutesBetween(currentTime, lastAccessedTime);
    if (diff.getMinutes()>1){
        logOut();

しかし、 lastAccessedTime は、コードが最後にこの行自体に来たときの時間を持っています

この行:

         DateTime lastAccessedTime = new DateTime(session.getLastAccessedTime());

したがって、ユーザーが何かを行った実際の時間を提供するのではなく、この行が呼び出された時間を提供します..

4

1 に答える 1

0

これを処理する 1 つの方法は、ログイン ステータスを格納しているテーブルに最後のアクティビティ列を作成し、この値に最後のユーザー アクティビティのタイムスタンプを入力することです。現在の時間と最後のアクティビティ時間の差を計算することにより、ステータスを「loggedOff」に設定する定義済みの間隔で実行するジョブを作成できます。

于 2013-10-23T19:02:40.757 に答える