在会话超时时更新loggedIn状态

时间:2013-10-23 18:37:41

标签: java gwt

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

它对我来说很好,但在一个场景中我面临着问题。

如果用户刚离开他的电脑并离开,现在他正试图从另一台电脑上登录。 但他在db中的loginStatus仍然是“登录”。因此他无法从其他电脑登录,除非他去另一台电脑(他之前登录过)并自行登出。

无论如何,我可以处理这个问题,理想情况下,当他尝试从其他位置尝试尝试从以前的PC /浏览器自动记录用户时,这是理想的。

当用户点击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());

所以它没有给出用户做某事的实际时间,相反它给了我调用这一行的时间..

1 个答案:

答案 0 :(得分:0)

处理此问题的一种方法是在表中存储最后一个活动列,用于存储登录状态,并使用上次用户活动的时间戳填充此值。您可以拥有一个在预定义的时间间隔内运行的作业,该作业将状态设置为" loggedOff"通过计算当前时间和上次活动时间之间的差异。