Подсчет и ограничение количества пользователей в моем приложении - PullRequest
2 голосов
/ 31 октября 2010

Мне нужно внедрить систему, чтобы ограничить количество пользователей, которые могут одновременно использовать мое приложение.Я думаю, что лучший способ - подсчитать количество активных в данный момент сеансов, а затем ограничить их на основе этого.

Как подсчитать количество активных в данный момент сеансов.Я использую memcached для хранения моих сессий, если это имеет значение

Ответы [ 3 ]

1 голос
/ 01 ноября 2010

Я думаю, что самый простой способ - перехватить обратные вызовы 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...
   }

}
1 голос
/ 01 ноября 2010

Может быть, ваш веб-сервер может ограничить максимальное количество одновременных клиентов?(Но это может повлиять на выборку изображений / другого статического содержимого)

1 голос
/ 31 октября 2010

Я не знаю, как подсчитать каждую активную сессию в данный момент времени в PHP. Я всегда использовал для этого базу данных, где я бы сохранял IP-адрес и текущую дату (функция SQL NOW ()). Затем я могу выполнить такой запрос (синтаксис MySQL):

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

Затем вы можете выбрать отображение страницы или запретить пользователю просматривать веб-сайт.

...