当用户登录到我的应用程序时,我将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());
所以它没有给出用户做某事的实际时间,相反它给了我调用这一行的时间..
答案 0 :(得分:0)
处理此问题的一种方法是在表中存储最后一个活动列,用于存储登录状态,并使用上次用户活动的时间戳填充此值。您可以拥有一个在预定义的时间间隔内运行的作业,该作业将状态设置为" loggedOff"通过计算当前时间和上次活动时间之间的差异。