我需要实施一个系统来限制可以同时使用我的应用程序的用户数量。我认为最好的方法是计算当前活动的会话数,然后以此为基础进行限制。
如何计算当前活动的会话数。我正在使用 memcached 来存储我的会话,如果这有影响的话
我需要实施一个系统来限制可以同时使用我的应用程序的用户数量。我认为最好的方法是计算当前活动的会话数,然后以此为基础进行限制。
如何计算当前活动的会话数。我正在使用 memcached 来存储我的会话,如果这有影响的话
我不知道有什么方法可以计算 PHP 在给定时间的每个活动会话。我一直为此使用数据库,在其中存储 IP 地址和当前日期(NOW() SQL 函数)。然后,我可以进行这样的查询(MySQL 语法):
SELECT COUNT(*) as active_users
FROM logged_users
WHERE last_action > NOW() - INTERVAL 5 MINUTE;
然后,您可以选择显示该页面或禁止用户查看该网站。
我认为最简单的方法是拦截会话的open
和destroy
回调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...
}
}
可能是您的网络服务器可以限制最大并发客户端数?(但这会影响获取图像/其他静态内容)