Php 实时了解用户在我的站点中

Php 实时了解用户在我的站点中,php,javascript,jquery,session,Php,Javascript,Jquery,Session,我有一个网站,我必须(用PHP和/或JavaScript)实现一条警报消息,在访问者进入该网站两分钟后触发。我已经搜索过了,但我找到的所有解决方案都是针对一个独特的页面。我需要定时器计数器启动时,用户进入我的网站,无论通过哪个页面。当用户浏览我的站点页面时,我需要计数器不断计数 一种解决方案是使用会话变量。我可以制作一个脚本来查找这个变量,如果它不存在意味着用户正在进入站点。然后我用当前时间设置这个变量。脚本在每个页面中,每x秒通过AJAX读取一次这个变量,两分钟后我就能知道用户何时进入我的站点

我有一个网站,我必须(用PHP和/或JavaScript)实现一条警报消息,在访问者进入该网站两分钟后触发。我已经搜索过了,但我找到的所有解决方案都是针对一个独特的页面。我需要定时器计数器启动时,用户进入我的网站,无论通过哪个页面。当用户浏览我的站点页面时,我需要计数器不断计数

一种解决方案是使用会话变量。我可以制作一个脚本来查找这个变量,如果它不存在意味着用户正在进入站点。然后我用当前时间设置这个变量。脚本在每个页面中,每x秒通过AJAX读取一次这个变量,两分钟后我就能知道用户何时进入我的站点

我不知道它是否正确(我还没有实现),但我不确定会话是否是最好的方式。如果用户离开页面但打开了其他导航器窗口,则会话不会过期,如果用户再次进入站点,计数器将不会重置

因此,有两个问题:

  • 有没有更好的方法 更多地控制真正的进入 然后退出
  • 如果不是的话,我的名字在上面吗 接近,对吗

  • 谢谢。

    像这样的东西应该行得通

    $alert_message = false;
    
    if(!isset($_SESSION['time_entered'])){
        $_SESSION['time_entered'] = time();
    }
    
    if($_SESSION['time_entered'] =< time() - 120){
        if(!isset($_SESSION['message_sent'])){
            $alert_message = true;
            $_SESSION['message_sent'] = true;
        }
    }
    
    $alert\u message=false;
    如果(!isset($\u会话['time\u entered'])){
    $\u会话['time\u entered']=time();
    }
    如果($\u会话['time\u entered']=
    中:

    
    警惕(“你已经在这里至少两分钟了。”);
    

    还要确保在每个脚本的顶部都有
    session\u start()

    您不需要AJAX,只需要将时间存储在会话变量中,然后在每个页面上包含一些JavaScript,下面是一个示例:

    <?php
    session_start();
    
    $time = microtime(true);
    
    if (!$_SESSION['foo']) {
        $_SESSION['foo'] = (microtime(true)+120);
    }
    ?>
    <script type="text/javascript">
        var timeoutID = setTimeout(function() {
            alert('two minutes have passed');
        }, <?php echo bcsub($_SESSION['foo'], $time)*1000 ?>);
    </script>
    
    
    var timeoutID=setTimeout(函数(){
    警报(“两分钟过去了”);
    }, );
    

    您需要一些额外的逻辑,以便它不会在120秒结束后继续启动。

    您的想法很好,但我建议在javascript中使用cookie实现同样的想法。1) 在第一次加载时,检查cookie是否已经存在,如果不存在,则将其设置为当前时间(请注意,服务器和客户端时间可能不同,因此使用一个时钟对所有内容计时)。2)
    setTimeout(…)
    第一次持续2分钟(2分钟减去页面重新加载时cookie时间和当前时间的差值)。但是如果我创建了一个cookie,当用户离开我的站点然后重新进入时,cookie将保留,我无法知道它是否进入。我错了吗?如果document.referer不是重置cookie的站点,您可以设置逻辑。最简单的方法是检查它是否包含您的域。您可以信任cookie过期(浏览器会为您这样做,所以无需在意)。默认情况下,浏览器关闭时cookie过期,我想这就是您想要的。或者,您可以手动将过期时间设置为任何所需的值(30分钟?1小时?1天?),如果用户打开了其他浏览器窗口或选项卡,cookie将在他关闭我的网站时过期?如果没有,那么使用会话也是一样的,不是吗?谢谢,卡尔。这是我的方法的实现,但我想知道是否有一种方法可以真正控制进入和退出,因为会话没有(我想),没有。除非会话被用户关闭,例如注销。我认为这会在所有页面上触发(如果用户同时打开了多个页面),因此如果没有AJAX,就无法真正做到这一点。我认为这只会在进入页面时触发警报。如果“时刻”到来并且用户正在查看一个页面,则在转到另一个页面或刷新当前页面之前,他不会看到警报。
    <?php
    session_start();
    
    $time = microtime(true);
    
    if (!$_SESSION['foo']) {
        $_SESSION['foo'] = (microtime(true)+120);
    }
    ?>
    <script type="text/javascript">
        var timeoutID = setTimeout(function() {
            alert('two minutes have passed');
        }, <?php echo bcsub($_SESSION['foo'], $time)*1000 ?>);
    </script>