ユーザーがアプリケーションにログインするたびに、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());
したがって、ユーザーが何かを行った実際の時間を提供するのではなく、この行が呼び出された時間を提供します..