java session时间的问题
我想搞清楚这个时间问题。我的类实现了HttpSessionListener接口,创建和摧毁事件都用上了,都加了提示的,我现在根据session数量来判断在线人数,把总数量存在ServletContext中,一旦有新的session创建就加1,一旦有摧毁就减1。最终加1减1都是没问题的,只是时间有点不对。
现在的问题是,虽然每个session创建时我都把它设为了1秒s.setMaxInactiveInterval(1);但是每当浏览器访问页面后等待1秒钟后session并不会摧毁,一直不动浏览器要等到45秒左右才会自动摧毁。这个1秒没体现出来。
但是,如果用手动刷新页面的方法,只要两次刷新时间间隔大于1秒,就可以观察到sessionID的变化,这时1秒又是体现出来了的。
为什么前面的方法体现不出1秒呢?难道1秒只是让session过期失效,从过期失效到被摧毁之间还有一个时间吗?这个时间程序不能控制吗?还有在线人数不能精确统计出来吗?我之前是设置了最大时间1秒,现在比如我设置最大时间1分钟,难道我想统计在线的人且1分钟内都在操作浏览器的人难道不能精确的统计出来吗?
具体代码如下:
public class test1 implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
HttpSession s=se.getSession();
s.setMaxInactiveInterval(1);
ServletContext sc=s.getServletContext();
Integer i=(Integer) sc.getAttribute("c");
if(i==null){//s.setAttribute("c",cc);
i=1;
sc.setAttribute("c", i);}
else{
i=++i;
sc.setAttribute("c",i);}
System.out.println("one session has created!当前人数是"+i); }
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
HttpSession session=se.getSession();
ServletContext sc=session.getServletContext();
Integer i=(Integer)sc.getAttribute("c");
i=--i;System.out.println("one session has destroyed!当前人数是"+i);sc.setAttribute("c",i);