2013-10-23 130 views
0

当用户登录到我的应用程序时,我将loginStatus作为“LoggedIn”保存在该用户的数据库中(因此多个登录不能从不同的计算机发生)。更新登录会话超时状态

它适用于我,但在1场景中我面临的问题。

如果用户只是离开他的电脑走开,现在他试图从其他电脑登录。 但他的db登录状态仍然是“登录”。所以他不能从其他电脑登录,除非他去其他电脑(他以前登录),并登出自己。

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

我在用户点击LOGOUT链接时调用此方法,这会使会话无效,并且还会拨打数据库.. 我想要调用此方法当出现不活动状态时,让我们说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()); 

所以没有给实际的时候,用户做了一些事情,相反,它给我的时候,这条线被称为..处理这是

+0

您如何知道同一个人从不同的机器登录?但是,如果没有采取任何操作,您可以设置一些计时器在一段时间后自动注销。 – Smit

+0

我会将他的凭据带到db,并检查他的loginStatus是否是“LoggedIn”,这是我在他第一次成功登录时设置的。所以如果该用户的loginStatus是“LoggedIN”,我会简单的不允许他登录。请让我知道最新的方式检查是否没有活动,这就是我之后 – junaidp

+0

这是我发现最接近你的情况。 [会话管理在gwt](http://stackoverflow.com/questions/5831692/session-management-in-the-gwt) – Smit

回答

0

的一种方式在表格的最后一个活动列中存储登录状态,并使用上次用户活动的时间戳记填充此值。您可以创建一个按预定义时间间隔运行的作业,通过计算当前时间与上次作业时间之间的差异,将状态设置为“loggedOff”。

+0

我正在使用session.lastActivity方法,但它获取最后一次当我调用此方法本身(“session.lastActivity”)时,请查看我更新的问题 – junaidp

+0

问题已更新 – junaidp