to  cnhgj(戏子) 
用户直接关闭浏览器,不会触发Session_End事件

解决方案 »

  1.   

    我知道啊,但是Session过期后就会触发啊
      

  2.   

    to  cnhgj(戏子)
    首先谢谢你的回答。可是Session_End不能解决我的问题。用户直接关闭浏览器,如果在Session过期之前重新用以前的id来登录系统,application变量
    中的id值还没有被清除掉,所有仍然是被限制登录的。
      

  3.   

    解决的办法就是有新的ID登陆时把旧的ID的Session Remove,以前登陆的ID就过期了
      

  4.   

    to  cnhgj(戏子)
    也不行,(另,说明一下,我这个系统是考试系统,所以考生登录这一块要求做的比较严密一些)因为我要限制的如果有一个考生用一个准考证号登录考试系统后,其他人都不能用这个准考证号登录了,除非这个考生登出了系统--在程序中表现为他的准考证号码从application变数中清除掉(application变数是一个hashtable)。
    如果按照你的方法,一个考生A用准考证号a1登录成功后,只要告诉另外一个考生B他的准考证号,密码和其他一些登录相关信息,这样考生B就可以同时登录这次考试了。
    因为考生B成功登录将remove application变数中考生A用准考证号a1,按照你的方法,实际等于application变数没有用。
      

  5.   

    那只能怪考生A,还能怪谁?而.net里根本无法监控客户端的IE关闭事件,毕竟.net运行在Server端
      

  6.   

    <BODY onunload=xx(event)>
    <P>&nbsp;</P>
    <script language=vbscript>
    function xx (ev)
    msgbox(ev.reason)
    end function
    </script>
    </BODY>
    不知这样能否找到。windows.event下面有很多,你看看有没有有用的。
      

  7.   

    不过我觉的登陆比较严密又是分部式的,那就用COM+把。
      

  8.   

    谢谢大家
    to xamcsdn2(知了) 
        windows.event的所有事件我是尝试过了,不过没有能够找到解决这个问题的事件和属性。
      

  9.   

    解决这个问题的关键是不能从客户端着手,因为你根本没有办法知道客户是不是关掉了窗口,即使使用onlunload也是不完备的,因为有的时候它不一定被触发。还是应该从服务器端着手。