Php 实时了解用户在我的站点中
我有一个网站,我必须(用PHP和/或JavaScript)实现一条警报消息,在访问者进入该网站两分钟后触发。我已经搜索过了,但我找到的所有解决方案都是针对一个独特的页面。我需要定时器计数器启动时,用户进入我的网站,无论通过哪个页面。当用户浏览我的站点页面时,我需要计数器不断计数 一种解决方案是使用会话变量。我可以制作一个脚本来查找这个变量,如果它不存在意味着用户正在进入站点。然后我用当前时间设置这个变量。脚本在每个页面中,每x秒通过AJAX读取一次这个变量,两分钟后我就能知道用户何时进入我的站点 我不知道它是否正确(我还没有实现),但我不确定会话是否是最好的方式。如果用户离开页面但打开了其他导航器窗口,则会话不会过期,如果用户再次进入站点,计数器将不会重置 因此,有两个问题:Php 实时了解用户在我的站点中,php,javascript,jquery,session,Php,Javascript,Jquery,Session,我有一个网站,我必须(用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>