huang_ftpjh
2019-08-02 21:00
采纳率: 33.3%
浏览 2.4k
已采纳

如何实现关闭浏览器就能执行退出登录

前辈们,如何实现关闭浏览器就能执行退出登录

下面是关闭页面会执行方法,但我想要的是关闭浏览器

<body onbeforeunload="return delSession()">  
    <script type="text/javascript">
        function delSession() {
            alert("下面的ajax有运行无法弹出窗口");

            $.ajax({
                type: "POST",
                url: "<%=basePath%>user/logout.do",
                async: false
            });
            window.location='jsp/logout.jsp';
            return undefined;
        }

    </script>
  • 用了 websocket,报错太多。。。抛弃了
  • 用了 session ,失效时间太长等不了他销毁

若使用cookie 机制,
如果在登录状态关机了,前台的检查cookie存在的方法没有运行(也就没有执行退出登录操作) ,那么只能等session过期时销毁登录?

求助大佬们

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • huang_ftpjh 2019-08-02 23:00
    已采纳

    感谢大佬回复, 浏览器关闭 cookie是销毁但是 后台不知道**销毁**!
    我想实现一个账号登录后 相同IP地址的允许再登录,
    其它相同账号不同IP的登录会提示用户已存在登录

    这个逻辑已经实现了,就是登录成功后保存status状态为1 同时保存IP,当用户退出登录时重置为0 (session到期时也执行该操作)
    当相同账号登录时,检查状态和IP即可

    User user  = userMapper.selectLogin(username,md5Password);
            if(user == null){ //前面的用户没查出来,逻辑上就不可能存在密码
                return ServerResponse.createByErrorMessage("密码错误");
            }
            if (user.getRoleid() != 0) {
                return ServerResponse.createByErrorMessage("非管理员,登录无效");
            }
    
            String ip = CusAccessObjectUtil.getIpAddress(request);//当前登录设备的IP
                    if (user.getStatus() == 1) {
                if (user.getIp() != null && !user.getIp().equals(ip)) {//相同账号第二次登录,如果IP不为空 与当前登录IP相同  放行,  否则
                    return ServerResponse.createByErrorMessage("用户已在 "+ user.getIp() + " 登录 ");
                }
            }
    
            //登录成功为1  status  检查如果为1 不允许登录
            userMapper.updatestatus(1,user.getId());
    
            USERSESSION = username;
    
            userMapper.updateIP(ip,username);//更新IP  退出登录时删除IP
    

    关于cookie的销毁

    <%
              Cookie   killMyCookie   =   new   Cookie("token",   null);
              killMyCookie.setMaxAge(0);
              killMyCookie.setPath("/");
              response.addCookie(killMyCookie);
            %>
    
    

    ^-^ 再问一下: 我想捕捉浏览器关闭( 也就是系统页面消失 )执行销毁session,但不知道咋搞

    非常不想用 websocket , 也不想用redis

    点赞 打赏 评论
  • Demo_Null 2019-08-02 22:00

    设置cooke存活,关闭浏览器之后,就把cooke给干死,session没有对应的sessionid等于废了

    点赞 打赏 评论
  • rengangdotorg 2019-08-02 23:20

    关闭浏览器好像有好几种方法关闭,先根据览器是否关闭来判断用户是否下线,然后再从session和application中将此用户移除。
    onbeforeunload="return CloseEvent();" onunload="UnLoadEvent()"

    <script language="JavaScript" type="text/javascript"> 
    var DispClose = true; 
    function CloseEvent() 
    { 
    if (DispClose) 
    { 
    return "离开当前页?"; 
    } 
    } 
    function UnLoadEvent() 
    { 
    DispClose = false; 
    //页面关闭前的动作 
    } 
    </script> 
    
    
    
    点赞 打赏 评论
  • PJ300 2019-08-03 10:43

    理论上发心跳包可以,没有心跳就是死了!
    可以用长连接,或者不停的http请求;

    点赞 打赏 评论
  • 小小小小小小小阳 2019-08-05 14:19

    你可以把在该账号登录的时候检测账号有无登录,然后把账号和IP 绑定在一起,如果另外一台机器在登录,既要验证账号 还得验证ip

    点赞 打赏 评论

相关推荐 更多相似问题