PHP - 访客在线柜台

时间:2010-11-21 05:57:02

标签: php session counter

我有以下代码来计算我的PHP网站上的访问者。它在使用WampServer的本地开发机器上工作正常,但是当我将文件上传到我的主机帐户进行测试时,我发现它无法正常工作。

我的数字计数非常高,并且还注意到会话永远不会被删除,所以他们只是不断累积。

这是一个简单的会话计数器。有没有更好的方法呢?有人可以给我看一下或者给我一些文章吗? 谢谢!

<?php
//------------------------------------------------------------
// VISITORS ONLINE COUNTER
//------------------------------------------------------------
if (!isset($_SESSION)) {
  session_start();
}
function visitorsOnline()
{
    $session_path = session_save_path();
    $visitors = 0;
    $handle = opendir($session_path);

    while(( $file = readdir($handle) ) != false)
    {
        if($file != "." && $file != "..")
        {
            if(preg_match('/^sess/', $file))
            {
                $visitors++;
            }
        }
    }

    return $visitors;
}
?>

5 个答案:

答案 0 :(得分:4)

如果这是共享托管,那么您需要计算每个人的会话文件,而不仅仅是您自己的。这就是为什么这个数字很大,而且与你的网站上有多少人无关。

答案 1 :(得分:2)

计算访问者的最佳(免费)方式是:http://www.google.com/analytics

如果您想要更多实时数据(例如,当前活跃的用户),请尝试:http://www.woopra.com/

如果您打算使用自己的代码维护站点上的活动用户,我会在用户表的数据库中使用“last action”日期字段。您将能够对SELECT COUNT(id) FROM Users WHERE #{Time.now} > #{15.minutes.ago}

执行PHP等效查询

如果您想跟踪匿名用户,而不是使用“用户”表,请创建一个以访问者的IP作为识别字段的表格,并使用上述相同的技术。

答案 2 :(得分:1)

如果生产服务器上的问题是会话永远不会被删除,那么您有两个选择:

  • 降低PHP安装的会话到期时间。
  • 检查会话文件的上次修改日期,如果从现在开始在一定时间内修改,则只计算总数。

答案 3 :(得分:1)

如果你想要自己的内部计数系统,那么我建议,将这些与网站相关的信息存储在数据库中。每次用户浏览网站时都会更新记录。

答案 4 :(得分:0)

嗯,我不确定在会话目录中读取会话文件是最好的方法。

为什么不在每个页面加载的db表上写一次。然后有一个读数,计算最后x分钟内唯一用户的数量?

这听起来像数据库密集,但除非你的网站超忙,否则我看不出问题。