问题描述
我现在用struts编写一个论坛,但是在编写过程中遇到了如下问题: 用户状态的确定(是上线还是下线) 我现在是设置了一个按钮点击后就将数据库中对应的字段变成0(0表示下线,1表示上线) 但是如果用户是关闭阅览器就不能确定成功了,原想 设置 在session中一个值,然后定时进行检查,但是这种方法时间无法确定。如果用户刚下线,又想上线。还有用户换阅览器登录怎么办(ie换到火狐)问题补充定时确定的时间不好确定呀?问题补充我主要是说,如果js请求时间设定一个值,然而用户又在这个时间段内重新登录。这不就不出现问题了,用户登录不上。因为数据库保留的在线标志。问题补充qyhdt 写道
解决方案
可以做一个session监听,session创建的时候就将登陆信息存入在线表中,如果用户是正常退出的,如:点击注销,或者是logout,后退就将session销毁,然后再做一个session监听,销毁时将登陆信息删除。设置session 30分钟失效。这样用户在关了浏览器也在半个小时候就会session销毁。至于你说的两个浏览器同时登陆 ,我觉得这种东西 记录在线情况的是否得考虑,一个用户只能在一个地方登陆,例如QQ 第二个用户登录就会被挤掉。如果保证单用户登录的话,那么同时打开2个浏览器登录将后登录的用户存入,把前一个踢掉就OK 了注意了:浏览器都有一个毛病 火狐最明显,就是在一个talbe也中同时开2个也没访问服务器的话,这时候只有一个session。这里不是我们自己的问题。
解决方案二:
痛苦不忧伤 写道pxjin888 写道定时确定的时间不好确定呀?js一分钟请求一次,cookie半小时或者15分钟过期,根据自己的业务需求判断时效性。有什么用?依赖客户端的压根就不靠谱服务器压根就不知道浏览器的存在定时正常情况下可以解决问题但浏览器崩溃呢?断电呢?这类需求要么就不做(session本身有timeout)要么就在服务器端通过监听的方式做
解决方案三:
这种问题 解决方法很多的 登陆了的用户 修改状态在线 退出了修改状态离线关闭浏览器了 那没辙 只能等当前session销毁时做监听换浏览器就等于是新的客户端会话了 跟你开始的登陆 注销都不相关
解决方案四:
pxjin888 写道定时确定的时间不好确定呀?js一分钟请求一次,cookie半小时或者15分钟过期,根据自己的业务需求判断时效性。
解决方案五:
可以考虑用客户端js定时向服务器推送用户是否在线通知,服务器端收到消息,保存用户的cookie和设置cookie生命周期。并动态刷新在线用户列表。这样做的好处是,只要用户登录就能记录下来,用户在非正常退出(比如关闭浏览器时)也可以在cookie失效后 从用户在线列表中去除。不好之处是:js定时向服务端请求耗性能。