java session时间的问题

pxyzxhsx 2013-01-29 09:16:27
我想搞清楚这个时间问题。我的类实现了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);
...全文
55 回复 点赞 打赏 收藏 举报
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2013-01-29 09:16
社区公告
暂无公告