日期:2014-05-20  浏览次数:20705 次

java session 难题
关于在线人数的问题在网上找了N久才知道如果某用户是非正常退出系统这个session就会一直存在,直到超时为止。 
如果把超时设的短一些的话在客户查看页面必需一直的点某些东西。 

太麻烦,难道就没有一个更好的方法来解决这个问题吗?
后来听人说ajax可以实现,查了一下好像是在关闭浏览器时向服务器发一个断开请求。 

但如果是网线断了要怎么办腻?或是机器突然断电了怎么办腻?

------解决方案--------------------
我给一个比较有趣的做法,当然很耗费资源。那就是持续连接。。。。

你做一个包含页面,用ajax/iframe里面调用。让每个可访问的页面都调用这个。

这个页面的代码大致如下。

Java code
while(true){
  try{
    out.println(); // 输出一个空行
     out.flush(); // 这一句必须写
    // 检查当前在线人员,确保它没有被删掉
    check(session);
    try{
      Thread.sleep(10); // 休眠一下吧
    }catch(Exception ex){}
  }catch(Exception ex){
    // 一旦发现异常,则证明此用户已经离开当前页面
    // 从在线人员里面删掉当前人员
     remove(session);
  }
}