0

当用户登录到我的应用程序时,我会在数据库中为该用户将 loginStatus 保存为“LoggedIn”。(因此不能从不同的计算机进行多次登录)。

它对我来说很好,但在 1 种情况下我面临问题。

如果用户只是离开他的电脑然后离开,现在他正试图从另一台电脑登录。但是他在 db 中的 loginStatus 仍然是“loggedIn”。所以他无法从其他电脑登录,除非他去另一台电脑(他以前登录的地方)并注销自己。

无论如何,我可以处理这个,理想情况下,如果有一种方法可以在他尝试从其他位置尝试时从以前的电脑/浏览器自动注销用户。

当用户单击 LOGOUT 链接时,我调用此方法,这会使会话无效,并且还调用 db .. 我想要的是调用此方法当有 2 分钟不活动时,或者用户只是关闭他的浏览器(没有 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

One way of handling this is to have a last activity column in the table where you are storing the login status and populate this value with timestamp of last user activity. You can have a job which runs on a predefined interval which will set the status to "loggedOff" by calculating the different between current time and last activity time.

于 2013-10-23T19:02:40.757 回答