我开发了一个Web应用程序。我想在其中添加注销功能。为此,我使用HttpSessionListener,但没有按照我的想法工作。会话超时处理 - (在会话自动到期时更新特定用户行)
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
public class GetActiveSessions implements HttpSessionListener {
private static int activeSessions = 0;
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
System.out.println("+ 1 session");
}
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
System.out.println("- 1 session");
}
public static int getActiveSessions() {
System.out.println(activeSessions);
return activeSessions;
}
}
我在sessionDestroyed()方法中标记了用户注销(通过更新数据库)。
如果会话超时,然后容器调用sessionDestroyed()方法,我更新数据库,但是当我显式调用session.invalidate()(当用户单击注销链接时)值从会话对象解除绑定但容器未调用sessionDestroyed()方法因此无法更新数据库。
并且还需要在用户关闭浏览器窗口时注销用户。
用户可以被标记为注销的地方有三种机会。 1.会话超时容器。 2.用户单击注销链接 3用户关闭浏览器窗口。
请给你你的宝贵意见。
甚至是基于javascript的...不是建议的课程。你有任何关于所有上述情况的常见解决方案的想法..请帮助解决 –
通常,当用户关闭浏览器时,安全密集的应用程序,他们不会注销用户。 实际注销仅在会话超时后发生。 像netbanking:当用户关闭任何netbanking浏览器而不点击注销按钮时,系统将不允许用户再次登录,直到会话超时发生。 你可以尝试相同的方法。 – Munesh