请大家帮忙给出思路,关于web session的

boy_wh520 2010-01-15 01:12:06
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个用户
请各位高手 给出思路,,,谢谢
...全文
230 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
potahai 2010-01-18
  • 打赏
  • 举报
回复
发表个人意见

客户端每秒向服务器端发送在线证明, 服务器端只存储该用户的最后发送时间和用户名,当然是按服务器的时间为准。即没有关闭浏览器此信息会一直在服务器端更新。 每隔5分钟或者10分钟遍历一次服务器端所有的帐号是否失效,判断该账户最后的更新时间,然后整理数据。

如果碰到断网断电 情况下 用户换台机器登录时需要马上登录上去。这个判断只在用户登录时进行服务器端的判断,先行查看此用户在线与否,再查看此用户最后的更新时间。如果与当前的时间差大于1S则让此用户登录。
boy_wh520 2010-01-18
  • 打赏
  • 举报
回复
继续
boy_wh520 2010-01-18
  • 打赏
  • 举报
回复
顶一下
boy_wh520 2010-01-18
  • 打赏
  • 举报
回复
大家 看我提出的需求 有好的解决方案吗?
boy_wh520 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 potahai 的回复:]
发表个人意见

客户端每秒向服务器端发送在线证明, 服务器端只存储该用户的最后发送时间和用户名,当然是按服务器的时间为准。即没有关闭浏览器此信息会一直在服务器端更新。  每隔5分钟或者10分钟遍历一次服务器端所有的帐号是否失效,判断该账户最后的更新时间,然后整理数据。

如果碰到断网断电 情况下  用户换台机器登录时需要马上登录上去。这个判断只在用户登录时进行服务器端的判断,先行查看此用户在线与否,再查看此用户最后的更新时间。如果与当前的时间差大于1S则让此用户登录。
[/Quote]

思路不错 可以考虑
smallrookie 2010-01-15
  • 打赏
  • 举报
回复
我也在等待你们的最终解决方案!学习学习
boy_wh520 2010-01-15
  • 打赏
  • 举报
回复
顶啊
boy_wh520 2010-01-15
  • 打赏
  • 举报
回复
这是一个交通指挥中心的需求
需求1 用户登录后 其他使用此用户名无法登陆
需求2 网页不关闭的情况 无论多久 在进行操作的时候 都不允许出现超时
需求3 由于需求1 用户出现断电断网后 换至其他地方登陆 必须马上可以登陆
wp500 2010-01-15
  • 打赏
  • 举报
回复
这个需求的合理性,还是有待研究的。

客户端的网页会不停向服务器段发送请求,就是说用户一旦登录就算什么也不操作session也是永远不会过期的。
这样如果用户在一台电脑登录后。如果用户忘记关闭网页而离开。 那么如果网页不关闭,用户就再也无法再其他机器上登录。

另外刷新的频率太短会对服务器造成过大的压力。 是不可行的。 频率太长又会导致意外关闭网页后用户等待时间长。
还是和需求部门研究一下。 出发点是什么是不是可以改变一种方式来解决
kamiomisuzu01 2010-01-15
  • 打赏
  • 举报
回复
给他个生命周期,到时候自动死掉就可以了呗。。。。
kamiomisuzu01 2010-01-15
  • 打赏
  • 举报
回复
没太明白。。。session不是有生命周期的么。。。
gjwang4518 2010-01-15
  • 打赏
  • 举报
回复
楼主没有必要这样做
session有个失效时间 过了失效时间会自动注销的
失效时间可以在web.xml中配置 默认为30分钟
crazylaa 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 buywilling 的回复:]
引用 12 楼 boy_wh520 的回复:
引用 11 楼 buywilling 的回复:
如果当前时间>map中改用户的过期时间则清楚改用户的session


这个没太看明白 能详细说一下吗

比如说你的timertask类运行的当前时间是12/02/2010 11:09:13
而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的时间间隔感觉是不合适的
[/Quote]

1s太夸张了,楼主这个系统如果同时在线的人数一多就会全部消耗在这个上了。1分钟或5分钟吧。
谁是莫默的呢 2010-01-15
  • 打赏
  • 举报
回复
学习
buywilling 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 boy_wh520 的回复:]
引用 11 楼 buywilling 的回复:
如果当前时间>map中改用户的过期时间则清楚改用户的session


这个没太看明白 能详细说一下吗
[/Quote]
比如说你的timertask类运行的当前时间是12/02/2010 11:09:13
而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的时间间隔感觉是不合适的
xiangqianxi 2010-01-15
  • 打赏
  • 举报
回复
路过,学习了
子龙奶爸 2010-01-15
  • 打赏
  • 举报
回复
session ++--不可以吗?如果制动发送是1分钟,session就设成61秒。这样就可以判断了啊,取不到就说明没发送。
sgl1984 2010-01-15
  • 打赏
  • 举报
回复
这样存在两个问题:
1、如果正在登陆使用系统的用户直接将浏览器关了,又打开重登,可能会提示他有人已经在使用该帐号了,让他过一分钟后再登。
2、断电断网后,立即跑到别人的机子上去登,也必须提醒让过一分后再登陆试试。
但想想,一分钟真的很短了,用户跑到别人的机子上去登,这个过程恐怕都不止一分钟,如果觉得长了,改为10秒算了,总比一秒强吧。
sgl1984 2010-01-15
  • 打赏
  • 举报
回复
感觉把问题搞复杂了,我提供一个思路:
1、你将session的超时时间设为一分钟,每隔30秒用ajax方式向服务器报到一次。
2、建一个静态的map
3、利用sessionListener,当新的session建立时,map.put(sessionId,用户名),session销毁时
map.remove(sessionId);
4 、登陆时,到map中找有没有相同用户名的,有就不让登。
这样,如果断电断网,用户的确是不能在别的机子上立即登,要等一分钟,但我想一分钟基本上应该没问题 吧。
boy_wh520 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 buywilling 的回复:]
如果当前时间>map中改用户的过期时间则清楚改用户的session
[/Quote]

这个没太看明白 能详细说一下吗
加载更多回复(11)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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