空闲,注销和会话到期,如何使用Symfony?

问题描述 投票:0回答:1

我试图让...“某事”知道用户是关闭浏览器还是在其他情况下是空闲的。我需要使用令牌注销用户。

我正在使用Symfony2.4并且实际注销包括处理程序,因为我需要知道该人是否已登录到另一台计算机。我不能简单地使用会话到期,因为该处理程序将不会执行,并且应用程序仍会将用户显示为已记录。

我正在使用此代码并且工作得非常好!!

<script>
        var unloaded = false;
        $(window).on('beforeunload', unload);
        $(window).on('unload', unload);
        function unload(){
            if(!unloaded){
                $('body').css('cursor','wait');
                $.ajax({
                    type: 'get',
                    async: false,
                    url: "{{ logout_url('main') }}",
                    success:function(){
                        unloaded = true;
                        $('body').css('cursor','default');
                    },
                    timeout: 50
                });
            }
        }
    </script>

与此相关的是,当用户尝试访问网站中的任何链接时,此代码将执行,并且需要再次登录。

我可以通过简单地转到另一个链接来避免此代码运行,或者我可以做些什么来获得类似的结果?

javascript php symfony session-cookies logout
1个回答
0
投票

这更像是一个Javascript问题,但很好。

如何用javascript包装所有外部链接,设置一个禁用unload()功能的标志?但这并不是很聪明,但应该有效。

类似的东西(未测试):

$('a').click(function(){
    // set the flag
    myFlag = true;
    return true;
}):

并在卸载中:

 function unload(){
   if (myFlag) {
     myFlag = false
     return
  }
  // the rest here
}

编辑:

如果要在页面卸载时发送请求,最好使用navigator.sendBeacon(),因为当用户代理有机会将数据异步传输到Web服务器时,不会延迟卸载或影响性能下一个导航。见https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

© www.soinside.com 2019 - 2024. All rights reserved.