用ajax 点击退出是向服务器请求一下

解决方案 »

  1.   

    转贴原文:http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=10
    在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。
    恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
      

  2.   

    当浏览器关闭时,可以调用一个javascript方法。然后在这个方法去调用java代码对session进行设置后,再执行关闭浏览器的操作。
      

  3.   

        4楼的方法可行。  但楼主的想法我觉得不好,你session可以管理好吗?如果用户开了两个以上的网页呢?  我觉得管理用户在线不在线,没必要去动用数据库,显然数据库的存取是要消耗一定的性能。
      

  4.   

    这个问题还是可以解决的!~!
    当你关闭浏览器的时候通过Ajax去请求!~!这样就监听到了浏览器的恶意关闭事件
    然后再通过JavaScript代码去操作数据库用户的状态!~!
      

  5.   

    http是没有状态的,所以呢,没有直接的办法去反映b和s的关系,只能用一种折衷的办法,那就是sid,session的id,如果你的ie禁用了cookie你会看到这个sid,当你不禁用的时候,这个cookie是随你的每一个请求在暗地里偷偷发送的,里边就有sid,服务器是没有办法时时感知客户的存在的,当然也是不应该的,所以就不能时时感知用户存在,所以就没有所谓在线用户这一说,因为除了连接的那一刻,用户都是不在线的,你也不要指望做的多么实时,只要不是差的太多就行了,让一个session失效时就认为用户不在线就可以了,用session listener就可以了