我想做到防止用户重复登录 我现在可以限制住用户重复登录也可以去注销登录
用户 但是 如果用户非正常退出既不点注销退出 那么 这个用户就不能在
Application中清除(我将登录用户列表放在Application里面) 我想请问的是 如果 在用户非正常退出出的时候去清除Application 在什么事件清除

解决方案 »

  1.   

    application_end 是最后一个会话关闭时触发 我用过Session_end 但是不触发
      

  2.   

    当前有会话根本就不触发application_end阿,关闭当前会话时候能触发的Session_End也没有反应
      

  3.   

    To aquariusdeng(无泪有伤之新手上路) 
    不管他用什么方法退出都能执行注销
    ????
    怎么做到不管他用什么方法退出都能执行注销用什么事件??
      

  4.   

    用xmlhttp做心跳包
    或者在浏览器关闭时向server发送一个消息
    不然只有等20min(默认)后的session_end
      

  5.   

    用xmlhttp做心跳包
    --------------------
    我赞成这个做法,如果你确实一定需要监控用户在线情况的话.
    你可在每个页面都写一个脚本(当然可以放在JS文件里面进行引用),这个脚本将每隔N分钟自动执行一次(用settimeout),脚本是xmlhttp,它向某个页面发送请求,我们可在此页面里面写事件,去更新application里面记录的当前用户的最后活动时间,同时检查其他用户的活动时间,假设有用户最后活动时间超过上述的N分钟,那么,就肯定他不在线了.
    这种做法会加大服务器的负担,假设很多人访问的话,这个刷新量很大,但确实可以做到精确的控制在线用户.
      

  6.   

    xmlhttp心跳包要怎么做啊?
    还没有接触这个东西,
    请各位高手指点阿
      

  7.   

    这很容易嘛,如下<SCRIPT LANGUAGE="JavaScript">
    <!--
    function XmlPost()
    {
    alert("以XML求取数据");
    var result = "";
    var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
    xmlHttp.open("POST", "xxx.aspx", false);
    xmlHttp.send("");
    setTimeout("XmlPost();",3000);
    }var doc=window.document;
    document.onLoad = XmlPost();//-->
    </SCRIPT>
      

  8.   

    var doc=window.document;
    这一句可以不要
      

  9.   

    既然你用的是Application,那也就是说你可以操作用户的在线信息,如果用户非正常退出,你就应该删除这个用户的Application信息,关键是你如何知道哪个用户退出了。你可以这样做,写一个单页专门监控这个Application信息,再修改客户使用的页面。监控页会定时读取Application信息,并生成一个标记,然后客户使用的页面也要定时读取这个Application信息,并修改该标记。监控页再次读取Application信息的时候会把这个标记与原来的标记进行比较,如果不同,说明用户依然在线,否则不在线可以删除。这个监控页必须在管理员这边运行。不明白再问,逻辑上行得通。
      

  10.   

    是不是用一个ServerSokcet监听一个Sokcet吗?
      

  11.   

    哎呀,javascript
    利用窗口的关闭事件,当窗口关闭的时候跳转到你专门写的注销页面能对付正常关掉浏览器的情况遇到掉电的情况就不知道了
      

  12.   

    michael_monkey(从头再来)的方法不可取,如果同时打开几个窗口呢?
      

  13.   

    hchxxzx(NET?摸到一点门槛) 的心跳包真不错,果然是高手作品,
    牛!!!!!!!
      

  14.   

    有地点是肯定的,只要用户退出,不过是采用什么方式退出的,都有一点是共同的:就是client端对server的request已经停止。
    用户非正常退出这种case,如果单靠在server端进行事件激发来控制的话,未免有点难度,至少我知道很多网站都有一个用户session expiretime,如果client端在一定时间内没有响应,sever便可放弃那个session.
    但是现在用户非法退出,有两种情况:
    1.在请求处理过程中,退出必然会导致request-response中断,这样可以引发一个exception,通过捕捉,然后处理。
    2.在无请求的情况下,就不用多虑了,只要等咱们的session expire就可以了。
    当然,不否认每隔一定时间就向每个client端发送一次ping探测是一种方法,依此来判断应该是最好的,但是资源开销太大了。msn就是这样子的。