弄了一个用户关闭浏览器非法退出系统,
 使用onbeforeunload和onunload 操作,在网上看了看基本上都是使用 window.onbeforeunload=function (){
alert("===onbeforeunload===");
if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){
     alert("你关闭了浏览器");
}else{
     alert("你正在刷新页面");
}
}实际他并没有起作用。请教谁有这方面的经验

解决方案 »

  1.   

    为什么要区分刷新和关闭呢?没明白什么叫非法退出系统。
    如果不退出就关闭窗口,session就会自动失效(取决于你后端如何设置session过期),那么登陆也会失效的。
      

  2.   

    我提的非法退出系统就是 我在登陆时设置了他的登陆状态,想在他强制关闭网页时把状态置为下线状态,
    那么这个session失效是?
      

  3.   

    我提的非法退出系统就是 我在登陆时设置了他的登陆状态,想在他强制关闭网页时把状态置为下线状态,
    那么这个session失效是?好吧,要实现这个功能,所以就要判断用户关闭窗口?
    那你有没有想过,如果用户打开了两个标签,关闭其中一个,你通知了后台说该用户下线了,你说他是在线呢还是下线状态呢?所以,你的解决方案,第一,行不通,第二,就算行得通也有逻辑上的bug。你这个“登陆状态”是单纯标志当前用户是否在线之用,还是时时记录网站的当前所有在线人数之用?
      

  4.   

    我提的非法退出系统就是 我在登陆时设置了他的登陆状态,想在他强制关闭网页时把状态置为下线状态,
    那么这个session失效是?好吧,要实现这个功能,所以就要判断用户关闭窗口?
    那你有没有想过,如果用户打开了两个标签,关闭其中一个,你通知了后台说该用户下线了,你说他是在线呢还是下线状态呢?所以,你的解决方案,第一,行不通,第二,就算行得通也有逻辑上的bug。你这个“登陆状态”是单纯标志当前用户是否在线之用,还是时时记录网站的当前所有在线人数之用?只记录当前用户是否在线。确实这样的设计是有问题的,有好的设计我可以试试。
      

  5.   

    如果是要单纯实现标志当前用户为合法的登陆用户,session机制就是你要的。如果你在统计网站的在线人数,这样吧,建一个online_user表,记录用户的最后活跃时间。用一个定时任务,每隔10分钟或者30分钟,扫描一下这个表,判断用户的最后活跃时间,如果超出你设定的时间,就认为该用户已下线。
      

  6.   

    我主要意图不是统计当前在线用户,只是为了防止重复登录,目前就是不知道怎么处理用户非法退出系统时注销的问题。后端语言都会有session机制的,你后端是php还是java还是其他?登陆的流程是:获取提交的表单,检查用户和密码是否正确,如果正确,把用户已登陆的信息放入session。
    以后每一次请求,都可以判断session中是否有已登陆的相关信息。你说的防止重复登录,完全可以在登陆操作之前判断session来阻止已登陆用户进行此操作。楼主还是先了解了解session机制的具体细节吧。
      

  7.   

    我主要意图不是统计当前在线用户,只是为了防止重复登录,目前就是不知道怎么处理用户非法退出系统时注销的问题。后端语言都会有session机制的,你后端是php还是java还是其他?登陆的流程是:获取提交的表单,检查用户和密码是否正确,如果正确,把用户已登陆的信息放入session。
    以后每一次请求,都可以判断session中是否有已登陆的相关信息。你说的防止重复登录,完全可以在登陆操作之前判断session来阻止已登陆用户进行此操作。楼主还是先了解了解session机制的具体细节吧。后台是MVC的, 好像关闭浏览器也不会触发Session_End事件的。
      

  8.   

    我主要意图不是统计当前在线用户,只是为了防止重复登录,目前就是不知道怎么处理用户非法退出系统时注销的问题。后端语言都会有session机制的,你后端是php还是java还是其他?登陆的流程是:获取提交的表单,检查用户和密码是否正确,如果正确,把用户已登陆的信息放入session。
    以后每一次请求,都可以判断session中是否有已登陆的相关信息。你说的防止重复登录,完全可以在登陆操作之前判断session来阻止已登陆用户进行此操作。楼主还是先了解了解session机制的具体细节吧。后台是MVC的, 好像关闭浏览器也不会触发Session_End事件的。防止重复我已实现,我是考虑的就是,当用户直接关闭浏览器时他的状态还是在线状态,那么下次登录时就会提示重复登录。
      

  9.   

    那是因为session有失效的时间,你不用管这些。把登陆信息往session里丢就是了。session机制就是来解决HTTP无状态的问题的。
      

  10.   


    丢进去以后然后在Session_End中如何处理呢?
      

  11.   

    session有一定的失效时间。因此,在session未失效期间,用户又重新回到你的网站,此时,用户还是已登陆状态的。如果用户离开的时间达到session失效时间,那么用户真的就下线了。一般我会把user这个对象放入session中,判断用户是否登陆的代码就是:
    isset($_SESSION['user']);request.getSession().getAttribute("user") != null;
    其他语言类似。
    不需要在session_end中做处理的。
      

  12.   

    session到达超时时间,会自动销毁,因此超时后以上代码会返回false。
    后台语言会自动维护session,记录最后活跃时间,因此不用担心的。
      

  13.   

    你的意思是用Session来记录当前的在线用户。 那么这时Session的默认时间是多长呢, 我关闭浏览器后多长时间这个session会失效呢?
      

  14.   


    你需要在web.config中配置吗?
      

  15.   

    没明白你的后台到底是什么,MVC是设计思想的说。
    请自行百度你所用的后端语言的session默认过期时间,以及如何手动调整这个时间。
      

  16.   


    没明白你的后台到底是什么,MVC是设计思想的说。
    请自行百度你所用的后端语言的session默认过期时间,以及如何手动调整这个时间。MVC2。
    我登录时用Session保存当前用户,然后再打开一个页面用相同浏览器登录session还是null
      

  17.   


    没明白你的后台到底是什么,MVC是设计思想的说。
    请自行百度你所用的后端语言的session默认过期时间,以及如何手动调整这个时间。MVC2。
    我登录时用Session保存当前用户,然后再打开一个页面用相同浏览器登录session还是null好吧,我也不懂MVC2神马的,你这个问题可以转到ASP.NET板块了,和js无关的哦。
      

  18.   


    没明白你的后台到底是什么,MVC是设计思想的说。
    请自行百度你所用的后端语言的session默认过期时间,以及如何手动调整这个时间。MVC2。
    我登录时用Session保存当前用户,然后再打开一个页面用相同浏览器登录session还是null好吧,我也不懂MVC2神马的,你这个问题可以转到ASP.NET板块了,和js无关的哦。好的,多谢。
      

  19.   


    window.onbeforeunload=function (){
    alert("===onbeforeunload===");
    if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){
         alert("你关闭了浏览器");
    }else{
         alert("你正在刷新页面");
    }
    return false;
    }1.这中写法IE中支持较好
    2.Chrome 仅会弹出是否离开此页/是否重新加载此页。不会执行alert。
    3.FireFox 会执行alert后关闭窗口。
    没有过多研究,请见谅
      

  20.   


    我在IE9下测试也是不行嘚
    window.onbeforeunload=function (){
    alert("===onbeforeunload===");
    if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){
         alert("你关闭了浏览器");
    }else{
         alert("你正在刷新页面");
    }
    return false;
    }加 return false; 了吗?
      

  21.   


    我在IE9下测试也是不行嘚
    window.onbeforeunload=function (){
    alert("===onbeforeunload===");
    if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){
         alert("你关闭了浏览器");
    }else{
         alert("你正在刷新页面");
    }
    return false;
    }加 return false; 了吗?亲测,么有问题。
      

  22.   


    我在IE9下测试也是不行嘚
    window.onbeforeunload=function (){
    alert("===onbeforeunload===");
    if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){
         alert("你关闭了浏览器");
    }else{
         alert("你正在刷新页面");
    }
    return false;
    }加 return false; 了吗?亲测,么有问题。<script type="text/javascript">
            window.onbeforeunload = function () {
                alert("===onbeforeunload===");
                if (event.clientX > document.body.clientWidth && event.clientY < 0 || event.altKey) {
                    alert("你关闭了浏览器");
                } else {
                    alert("你正在刷新页面");
                }
                return false;
            }
        </script>
    这是我的测试代码,刷新和关闭执行的事件都一样!!