繁体   English   中英

在浏览器关闭时破坏会话和用户数据(PHP)

[英]Destroying Session and User Data on browser close ( PHP)

我知道这个问题已被多次询问如何使用php跟踪网站上的在线用户,如果用户登录到我的网站我做的是非常基本的我将他们的数据保存到数据库,一旦他们点击退出我销毁他们的会话并从我的数据库中删除该用户名。

真正的问题发生在用户直接关闭浏览器时,我无法对我的数据库运行mysql查询,看起来他们仍然登录但不是。

我不想设置任何时间来销毁cookie或会话,因为这不是合适的方式,比如我将时间设置为30分钟并且用户在一分钟内关闭浏览器,所以29分钟他将在线显示所以我不想那样。

谢谢

当用户关闭浏览器时,使用web-socket即http://html5demos.com/web-socket ,连接将被中断,然后将其设置为脱机,但仅适用于现代浏览器。

但是,您仍然可以使用push-stream来监视用户,从而使用web-socket。

但是,如果您使用会话,则可以将会话diconnect设置为会话断开连接的同时。 PHP默认为15分钟(您可以自定义)。 因此,如果您的用户此时保持您的网站开放但未提出请求,则在此之后,即使浏览器仍处于打开状态,其会话也将关闭。

有更好的解决方案,使用JavaScript在“onBeforeUnload”事件上向服务器发送AJAX请求。 这样,脚本将确保仅在用户离开网站时删除会话和DB记录。

<script type="text/javascript">
    $(window).on('beforeunload', function() {
        $.ajax({
          url: /controller/action/clear
        });
    }); 
</script>

您还必须存储用户重新加载页面的时间。 在身份验证之后,单击某个链接或其他内容后,您必须在数据库中存储/更新所有这些操作。

在此之后,您应该检查,如果用户是在网站上访问或者是大约15分钟前重新加载页面,那么他不在线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM