用户状态确定问题

我现在用struts编写一个论坛,但是在编写过程中遇到了如下问题:
  用户状态的确定(是上线还是下线)
  我现在是设置了一个按钮点击后就将数据库中对应的字段变成0(0表示下线,1表示上线)  但是如果用户是关闭阅览器就不能确定成功了,原想 设置 在session中一个值,然后定时进行检查,但是这种方法时间无法确定。如果用户刚下线,又想上线。还有用户换阅览器登录怎么办(ie换到火狐)
问题补充
定时确定的时间不好确定呀?

问题补充
我主要是说,如果js请求时间设定一个值,然而用户又在这个时间段内重新登录。这不就不出现问题了,用户登录不上。因为数据库保留的在线标志。
问题补充

qyhdt 写道
这种问题 解决方法很多的 登陆了的用户 修改状态在线 退出了修改状态离线

关闭浏览器了 那没辙 只能等当前session销毁时做监听

换浏览器就等于是新的客户端会话了 跟你开始的登陆 注销都不相关


这是问题,那么解决方案了。
问题补充
wms6891 写道
可以做一个session监听,session创建的时候就将登陆信息存入在线表中,如果用户是正常退出的,如:点击注销,或者是logout,后退就将session销毁,
然后再做一个session监听,销毁时将登陆信息删除。
设置session 30分钟失效。这样用户在关了浏览器也在半个小时候就会session销毁。
至于你说的两个浏览器同时登陆 ,我觉得这种东西 记录在线情况的是否得考虑,一个用户只能在一个地方登陆,例如QQ 第二个用户登录就会被挤掉。
如果保证单用户登录的话,那么同时打开2个浏览器登录将后登录的用户存入,把前一个踢掉就OK 了


注意了:浏览器都有一个毛病 火狐最明显,就是在一个talbe也中同时开2个也没访问服务器的话,这时候只有一个session。这里不是我们自己的问题。

这个方法可行,那么用户踢出的方式是什么。

5个回答

可以做一个session监听,session创建的时候就将登陆信息存入在线表中,如果用户是正常退出的,如:点击注销,或者是logout,后退就将session销毁,
然后再做一个session监听,销毁时将登陆信息删除。
设置session 30分钟失效。这样用户在关了浏览器也在半个小时候就会session销毁。
至于你说的两个浏览器同时登陆 ,我觉得这种东西 记录在线情况的是否得考虑,一个用户只能在一个地方登陆,例如QQ 第二个用户登录就会被挤掉。
如果保证单用户登录的话,那么同时打开2个浏览器登录将后登录的用户存入,把前一个踢掉就OK 了

注意了:浏览器都有一个毛病 火狐最明显,就是在一个talbe也中同时开2个也没访问服务器的话,这时候只有一个session。这里不是我们自己的问题。

可以考虑用客户端js定时向服务器推送用户是否在线通知,服务器端收到消息,保存用户的cookie和设置cookie生命周期。并动态刷新在线用户列表。
这样做的好处是,只要用户登录就能记录下来,用户在非正常退出(比如关闭浏览器时)也可以在cookie失效后 从用户在线列表中去除。不好之处是:js定时向服务端请求耗性能。

[quote="pxjin888"]定时确定的时间不好确定呀?
[/quote]
js一分钟请求一次,cookie半小时或者15分钟过期,根据自己的业务需求判断时效性。

这种问题 解决方法很多的 登陆了的用户 修改状态在线 退出了修改状态离线

关闭浏览器了 那没辙 只能等当前session销毁时做监听

换浏览器就等于是新的客户端会话了 跟你开始的登陆 注销都不相关

[quote="痛苦不忧伤"][quote="pxjin888"]定时确定的时间不好确定呀?
[/quote]
js一分钟请求一次,cookie半小时或者15分钟过期,根据自己的业务需求判断时效性。[/quote]

有什么用?依赖客户端的压根就不靠谱
服务器压根就不知道浏览器的存在
定时正常情况下可以解决问题
但浏览器崩溃呢?断电呢?

这类需求要么就不做(session本身有timeout)
要么就在服务器端通过监听的方式做

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐