【问题标题】:Finding total number of active sessions查找活动会话的总数
【发布时间】:2013-06-23 09:07:12
【问题描述】:

我是 PHP 的初学者,我正在为我的网站编写一些代码。我想获得在那一刻处于活动状态的会话总数。我知道这是一项艰巨的任务,但有可能。我该怎么做?

我用谷歌搜索过,有人说可以通过计算临时目录中临时会话文件的总数来实现。但是,它在哪里?

为了更好地解释,请考虑 Joomla 后端的示例,它显示了当前访问者和管理员的总数,如下所示:

【问题讨论】:

    标签: php session session-state


    【解决方案1】:

    我正在改进来自@user2067005 的答案。您实际上需要从计数中减去 2,因为 scandir 也报告了 ... 条目。

    $number_of_users = count(scandir(ini_get("session.save_path"))) - 2;
    

    【讨论】:

      【解决方案2】:

      所有允许您显示访问者数量的网站都使用数据库会话处理程序(可以是 mysql db 甚至是 memcached)。

      会话表结构:

      CREATE TABLE `sessions` (
      `id` INT NOT NULL ,
      `session_id` VARCHAR( 32 ) NOT NULL ,
      `user_id` INT NOT NULL ,
      `last_seen` DATETIME NOT NULL
      ) ENGINE = InnoDB;
      

      会话 ID 可以是内置的 php 会话 ID,也可以是您自己的唯一哈希。内置会话的运行速度不是那么快,但您无需注意生成会话 ID、到期日期等。

      用户 ID 将是当前登录的用户 ID,如果他是访客,则为 NULL。

      每次用户刷新页面时,您都应该更新session 表:

      • 如果数据库中已存在会话,则更新 last_seen
      • 为每个不这样做的新访问者添加一个新行
      • 在用户登录或注销时更改 user_id 值
      • 删除过期会话

      此时您可以使用简单的 sql 查询来获取所有访问者的数量:

      SELECT
          COUNT(`user_id`) AS users,
          (COUNT(*) - COUNT(`user_id`)) as guests
      FROM
         `sessions`
      WHERE
          `last_seen` >= DATE_SUB(NOW(), INTERVAL 15 MINUTE)
      

      【讨论】:

      • 是的,你几乎没看错,但我的网站实际上只允许匿名用户。它会起作用吗?
      • 是的。在这种情况下,您不需要 user_id 行,最后一个查询是这样的:'SELECT COUNT(*) as visitors FROM `sessions`
      【解决方案3】:

      这将计算一次打开的会话数量。

      $number_of_users = count(scandir(ini_get("session.save_path")));
      

      【讨论】:

      • 返回值 15 并且对于每个会话开始它都会增加,但是当会话结束时如何清除。
      【解决方案4】:

      是的,我们可以扫描 temp/ 文件夹或会话存储文件夹 session.save_path 以查找所有会话文件,但即使在会话销毁之后,有时也无法确保正确的结果 session_destroy() 会话存储文件夹包含已注销的会话文件用户。在这种情况下,你会得到错误的结果。而且,如果您启动phpmyadmin(MySQL),它将创建一个它自己的会话文件。

      【讨论】:

        【解决方案5】:

        如果您添加/拥有一个至少有 ip 地址和时间列的 mysql 表进行统计分析,即使您的网站没有会员活动,该表也将由访问者的点击填充。

        在您的每个页面中,将 ip 和 time 插入此表。

        然后您可以获取最多 15 分钟前点击的不同 IP 地址。持续时间与您的内容密切相关,甚至可能是 10 秒或 1 小时。问问自己,如果你是你的访客,你会在你的网站上浏览多少,当然要诚实:)

        最后,你的桌子会在一段时间后变胖。确定删除无用行的频率、逻辑和方法。根据您的网站流量和来源,在每次到达频率时清理表格。

        【讨论】:

          猜你喜欢
          • 2011-12-10
          • 1970-01-01
          • 2011-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多