HttpSessionListener的问题
public class MySessionListener implements HttpSessionListener{
private static Map usersMap = new HashMap();
public void sessionCreated(HttpSessionEvent se){
HttpSession session = se.getSession();
System.out.println( "Session Created. ");
}
public void sessionDestroyed(HttpSessionEvent se){
HttpSession session = se.getSession();
System.out.println( "Session Destroyed. ");
}
...
}
在web.xml中配置了该Listener,然后打开一个IE窗口,请求该应用中的页面,控制台打印出Session Created.
再打开一个IE窗口,请求该应用中的页面,控制台又打印出一行Session Created.
现在有两个IE窗口,问题是,但我关闭窗口的时候,控制台不打印Session Destroyed.要等到30分钟后,Session失效后才打印出来。
请问怎样才能实现,当用户关闭IE窗口时,立即使Session失效,打印出Session Destroyed.
------解决方案--------------------up
------解决方案--------------------不可以这样的吧
你要把所有叶面都关掉的吧
------解决方案--------------------关注
------解决方案--------------------关注
------解决方案--------------------Session的创建是因为有request,
但是销毁却只有以下方法:
1.等待Session过期
2.显示调用session.invalidate
你关闭窗口时根本没触发这两者中的一个,
Session怎么可能有销毁的事件发生呢。
你可以在窗口的onclose事件中向服务器提交一次,
然后在服务器端显示将session失效。
但是如果你通过任务管理器,或其它强制方法(如关机)将浏览器关闭,
那这个方法就不起做用了。
不过还有其它的办法解决。
可以通过写javascript或applet,与服务器通信,每隔几秒提交一个请求,
告诉服务器当前session是激活的,并在服务器端开一个线程判断,
如果有哪个session过了挺长时间(自己定)还没有刷新,那就将它失效。
就类似于操作系统中的页换出内存。
------解决方案--------------------up
------解决方案--------------------楼主不用想了。你这个测试我也做过,目前是没有解决办法的。唯一好点的就是关闭页面的时候去调用一个销毁session的页面。
------解决方案--------------------关闭session的代码执行时间是不确定的。没有办法!!!