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);
}
}