Мне нужно внедрить систему, чтобы ограничить количество пользователей, которые могут одновременно использовать мое приложение. Я думаю, что лучший способ – подсчитать количество активных сеансов, а затем ограничить их.
Как я могу подсчитать количество активных сеансов. Я использую memcached для хранения моих сеансов, если это имеет значение
Я думаю, что самый простой способ – перехватить вызовы 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... } }
Я не знаю, как рассчитывать каждый активный сеанс в данный момент в PHP. Я всегда использовал базу данных для этого, где я бы сохранил IP-адрес и текущую функцию (NOW () SQL). Затем, я могу сделать такой запрос (синтаксис MySQL):
SELECT COUNT(*) as active_users FROM logged_users WHERE last_action > NOW() - INTERVAL 5 MINUTE;
Затем вы можете отобразить страницу или запретить пользователю просматривать веб-сайт.
Может быть, веб-сервер может ограничить максимальное количество одновременных клиентов? (Но это может повлиять на получение изображений / другого статического содержимого)