1.客户端做一个1秒刷新的页面 通过xmlhttp隐藏在其他页中,每秒通过这个页面获取的session向指定的servlet发送一下这个用户名 例如:http://127.0.0.1/a.jsp?name=tt 目的只要客户端一直存在可以获取session中的用户名
2.服务端将登陆的用户列表保存 根据每秒的客户端请求,来判断用户的session是否存在?问题
现在想知道通过什么方法来获取到 当前列表中的用户的客户端是否向服务端发送了请求,如果没请求则通知session自动移除此客户端session。
把用户列表写入一个文件 格式为aa,bb,cc如果现在获取到客户端用户名为aa请求,bb cc 在规定时间内没有请求 ,如何能判断出来没有请求从而在列表文件中删除这2个用户
请各位高手 给出思路,,,谢谢
2.服务端将登陆的用户列表保存 根据每秒的客户端请求,来判断用户的session是否存在?问题
现在想知道通过什么方法来获取到 当前列表中的用户的客户端是否向服务端发送了请求,如果没请求则通知session自动移除此客户端session。
把用户列表写入一个文件 格式为aa,bb,cc如果现在获取到客户端用户名为aa请求,bb cc 在规定时间内没有请求 ,如何能判断出来没有请求从而在列表文件中删除这2个用户
请各位高手 给出思路,,,谢谢
在服务器端开条线程处理LZ 是不是主要判断用户是否在线?1.客户端做一个1秒刷新的页面 通过xmlhttp隐藏在其他页中用户人数1多 或者 用户开了几个页面服务器压力感觉满大的感觉没必要每秒刷新
还有就是 如果用户本地登陆 突然断网或停电了 马上去其他机器登陆 如果session 有时间 那么可能会认为用户在线 不允许登陆
只有这样 与客户端保持连接 在最短时间内失去与客户端通讯后,会马上在服务端清除session,用户才会马上可以登陆
存成Map就行了,key为用户名,value为过期时间。
比如:
aa, '12/02/2010 11:09:11'
bb, '12/02/2010 11:09:11'
用户aa每次发送请求更新过期时间为 当前时间+预期请求间隔另建一个timertask类,循环检查用户列表当前时间,如果当前时间>map中改用户的过期时间则清楚改用户的session
1、你将session的超时时间设为一分钟,每隔30秒用ajax方式向服务器报到一次。
2、建一个静态的map
3、利用sessionListener,当新的session建立时,map.put(sessionId,用户名),session销毁时
map.remove(sessionId);
4 、登陆时,到map中找有没有相同用户名的,有就不让登。
这样,如果断电断网,用户的确是不能在别的机子上立即登,要等一分钟,但我想一分钟基本上应该没问题 吧。
而map中的数据是
aa, '12/02/2010 11:09:11'
bb, '12/02/2010 11:09:14'
循环检查map中的元素,发现当前时间(12/02/2010 11:09:13)> aa的过期时间'12/02/2010 11:09:11', 则说明aa用户的session应该被清除。当然不管怎样1s的时间间隔感觉是不合适的
session有个失效时间 过了失效时间会自动注销的
失效时间可以在web.xml中配置 默认为30分钟
这样如果用户在一台电脑登录后。如果用户忘记关闭网页而离开。 那么如果网页不关闭,用户就再也无法再其他机器上登录。 另外刷新的频率太短会对服务器造成过大的压力。 是不可行的。 频率太长又会导致意外关闭网页后用户等待时间长。
还是和需求部门研究一下。 出发点是什么是不是可以改变一种方式来解决