日期:2014-05-20  浏览次数:20827 次

怎么在退出时删除某一字段中的值
jsp网站给用户一状态,上线为1离线为0,在关闭事件中加入一事件向服务器发送一离线值,有1变成0,或者直接删除清空。求大师帮忙
------最佳解决方案--------------------
客户端浏览器什么时候关闭我们服务器是无法得知的。
(因为用户有可能点任务栏右击菜单关闭,有可能点关闭图标关闭,有可能点图标栏右击菜单关闭,有可能异常
死机突然断电等等,这个没法判断的)
这个只能通过session失效来辨别了,设定一个session的有效时间30分钟或更多,这样如果这段时间内用户没
对网站进行任何操作,就认为session失效。
------其他解决方案--------------------
楼主这位兄弟说的好像很轻松,但是根本不现实,你要知道用户的操作时间你就得实时监听用户的操作记录下他
每次操作的时间这个就已经有问题了,试问一个网站用户量得多大啊,还有一个用户在网站怎么操作,
操作了什么,你都得监听,这个没想过难度多大吗。还有用户量一多每个用户都得单独的线程去扫描,这对系统的
负荷考虑过吗。
------其他解决方案--------------------
一个用户在网站上鼠标动一动,键盘按一按也是操作啊,难道他这样每次都得记录操作时间。如果不每次记录又怎么
知道哪次是最后操作,认为他已离线。

引用:
不建议用session失效,因为session失效并不会发出一个事件去通知数据库更新,楼主的需求明显是需要通知数据库更新的。
你可以把在底层加一个filter,每次都记录用户访问的最后时间,然后用一个Thread去扫面用户的最后操作时间,如果用户最后操作时间小于当前时间10分钟,认为已经下线,把数据库状态进行修改。

------其他解决方案--------------------
帮顶
------其他解决方案--------------------
关闭浏览器、在地址栏上输入其它网址跳转离开当前网页,都算是下线,这两种情况我倒是做过JS判断,只针对IE,方法在网上能找到,至于说其它突发情况下线真的没办法知道,C/S软件才比较容易知道,银行的软件在退出时总是会提示也是因为装了ActiveX控件一类的办法,上述仅供参考。
------其他解决方案--------------------
可以使用SessionListener来监听session是否过期,来判断他是否离线,这个里面有一个unbound方法在你的session invalidate和session timeout的时候都会触发。

但是说实话这个在线统计确实有点困难。
------其他解决方案--------------------
不建议用session失效,因为session失效并不会发出一个事件去通知数据库更新,楼主的需求明显是需要通知数据库更新的。
你可以把在底层加一个filter,每次都记录用户访问的最后时间,然后用一个Thread去扫面用户的最后操作时间,如果用户最后操作时间小于当前时间10分钟,认为已经下线,把数据库状态进行修改。
------其他解决方案--------------------
引用:
退出浏览器后,session值变化,以session值变化为条件,修改数据库中的值,这样可行吗?

打开多个标签,其实他们都是一个session,如果关闭一个页面,你能确定他是离开了网站么?不能吧,因为其他页面还没有退出,所以session的值变化是不可靠的……
------其他解决方案--------------------
HttpSessionBindingListener-->valueBound-->valueUnbound
------其他解决方案--------------------
帮顶        
------其他解决方案--------------------
session正解。要是这个用户登录状态也要更新数据库,那楼主这思想太耗性能了吧
------其他解决方案--------------------
楼上说的正确!
------其他解决方案--------------------
一般的用户判断在不在线 用session就行了,但我现在要面对的是一个特殊对象,情况如下:

登录以后,就算他一直不操作,也不会掉线(我不用session去判断他是否在线),但当他关闭页面,浏览器 或意外死机时会传送一个离线值到数据库修改某个值,从而判断其离线。
------其他解决方案--------------------
楼上的兄弟  能给个具体地址吗?
------其他解决方案--------------------
退出浏览器后,session值变化,以session值变化为条件,修改数据库中的值,这样可行吗?

------其他解决方案--------------------
还有木有?有做过这个的吗?帮帮忙