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);
...全文
110 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧