Как проверить вошедших в систему онлайн-пользователей с помощью 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
        .....

    }
}

Тогда мы считаем активных пользователей и многое другое.

Другие вопросы по тегам