我开发了一个网络应用程序。我想在其中添加注销功能。为此,我使用了 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 用户关闭浏览器窗口。
请提出您的宝贵意见。