2

我需要实施一个系统来限制可以同时使用我的应用程序的用户数量。我认为最好的方法是计算当前活动的会话数,然后以此为基础进行限制。

如何计算当前活动的会话数。我正在使用 memcached 来存储我的会话,如果这有影响的话

4

3 回答 3

1

我不知道有什么方法可以计算 PHP 在给定时间的每个活动会话。我一直为此使用数据库,在其中存储 IP 地址和当前日期(NOW() SQL 函数)。然后,我可以进行这样的查询(MySQL 语法):

SELECT COUNT(*) as active_users
FROM logged_users
WHERE last_action > NOW() - INTERVAL 5 MINUTE;

然后,您可以选择显示该页面或禁止用户查看该网站。

于 2010-10-31T20:56:27.003 回答
1

我认为最简单的方法是拦截会话的opendestroy回调gc(使用session_set_save_handler())并增加/减少 memcached 中的会话计数值。就像是:

class Memcache_Save_Handler {

   private $memcached;

   public function open($save_path, $name) {
      $session_count = (int)$this->memcached->get('session_count');
      $this->memcached->set('session_count', ++$session_count);
      // rest of handling...
   }

   public function destroy($id) {
      $session_count = (int)$this->memcached->get('session_count');
      $this->memcached->set('session_count', --$session_count);      
      // rest of handling...
   }

}
于 2010-10-31T21:03:32.913 回答
1

可能是您的网络服务器可以限制最大并发客户端数?(但这会影响获取图像/其他静态内容)

于 2010-10-31T21:39:05.160 回答