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