Как проверить вошедших в систему онлайн-пользователей с помощью Zend Framework
Я хочу знать, как узнать количество пользователей, которые в данный момент находятся в сети или имеют активные сеансы на веб-сайте с использованием Zend Framework.
Я попробовал обычный способ чтения Session Save Path, но он не работает с Zend. Может кто-нибудь здесь предложить мне хороший способ узнать, сколько активных сеансов на сервере в любой момент времени.
3 ответа
Вы не можете использовать сеансы для этого, вам нужно будет хранить онлайн-пользователей в БД и отображать всех, кто активен. При выходе удалить / обновить записи из БД.
или установите флажок в таблице пользователей и обновляйте флаг как y/n каждый раз, когда пользователь входит / выходит из системы.
или что-то похожее на это.
Если пользователь закрывает браузер без выхода из системы, то когда в следующий раз пользователь попытается войти в систему. Вы можете проверить предыдущие активные сеансы для этого пользователя, если таковые имеются? предоставить пользователю окно с информацией о том, что последний выход из системы был неверным, и принять какое-либо событие от этого пользователя для обновления времени, или вы можете попросить пользователя ввести время выхода из системы (расчетное) для поздней сессии или, если пользователи не заинтересованы в выборе времени, вы можете обновить выход из системы. со временем выхода из системы. сделать клеветнический интервал времени входа в систему.
думай так...
Недавно была эта проблема. Решил это так:
Обычно контроллер является расширением Zend_Controller_action, например
class IndexController extends Zend_Controller_Action
В нашем проекте мы создали расширенный контроллер в /library/ME/Controller
class ME_Controller_Base extends Zend_Controller_Action
public function init()
{
parent::init();
}
}
Используя этот контроллер, вы можете расширить все остальные свои контроллеры, поэтому вышеприведенный контроллер по умолчанию
class IndexController extends Zend_Controller_Action
в
class IndexController extends ME_Controller_Base
Важно, не забывайте всегда вызывать parent::init() в разделе init () вашего контроллера (в любом случае, это хорошая практика)
class IndexController extends ME_Controller_Base
{
public function init()
{
parent::init();
}
}
Теперь вы можете добавить любой понравившийся вам код в "Базовый" контроллер. Поскольку мы используем Zend_Auth с пользовательским объектом Doctrine, конечный "базовый" контроллер выглядит следующим образом
class ME_Controller_Base extends Zend_Controller_Action
public function init()
{
parent::init();
$auth = Zend_Auth::getInstance();
$this->view->user = $auth;
$this->user = $auth;
// check auth
...
// write an update to say that this user is still alive
$this->user->getIdentity()->update();
}
}
Метод update() просто устанавливает "обновленное" поле на текущую дату и сбрасывает пользователя. Затем вы можете просто выбрать пользователей, которые были просмотрены в течение последних X минут, чтобы показать список.
Вместо того, чтобы создавать базовый контроллер и расширять все остальные контроллеры, мы можем создать и использовать плагин Zend Front Controller (см. Примеры здесь) для регистрации всех запросов на нашем веб-сайте или в веб-приложении.
class App_Plugin_RegisterActivity extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopShutdown() {
// read user identity
$auth = Zend_Auth::getInstance();
$authStorage = $auth->getStorage();
$identity = $authStorage->read();
$userID = $identity->id;
// update user's table with current timestamp
.....
}
}
Тогда мы считаем активных пользователей и многое другое.