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

时间:2011-12-20 13:12:24

标签: php session

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

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

我不想设置任何时间来破坏cookie或会话,因为这不是合适的方式,比如说我将时间设置为30分钟并且用户在一分钟内关闭浏览器,所以29分钟他将在网上出现,所以我不想要那个。

由于

3 个答案:

答案 0 :(得分:3)

当您的用户关闭浏览器时,使用网络套接字即:http://html5demos.com/web-socket,连接将被中断,然后您将其设置为离线,但只能在现代浏览器上使用。

但是,您仍然可以使用push-stream来监控用户,使用网络套接字。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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