当用户登录到我的应用程序时,我会在数据库中为该用户将 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());
所以它没有给出用户做某事的实际时间,而是给了我调用这条线的时间..