Как проверить вошедших в систему онлайн-пользователей с помощью Zend Framework - PullRequest
7 голосов
/ 09 декабря 2010

Я хочу знать, как узнать количество пользователей, которые в данный момент находятся в сети или имеют активные сеансы на веб-сайте с использованием Zend Framework.

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

Ответы [ 3 ]

4 голосов
/ 13 декабря 2011

Недавно возникла эта проблема. Решил это так:

Обычно контроллер является расширением 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 минут, чтобы показать список.

2 голосов
/ 09 декабря 2010

Вы не можете использовать сеансы для этого, вам нужно будет хранить онлайн-пользователей в БД и отображать всех, кто активен. При выходе удалить / обновить записи из БД.

или установите флажок в таблице пользователей и обновляйте флаг как y / n каждый раз, когда пользователь входит / выходит из системы.

или что-то подобное.

Если пользователь закрывает браузер без выхода из системы, то когда в следующий раз пользователь попытается войти в систему. Вы можете проверить предыдущие активные сеансы для этого пользователя, если таковые имеются?предоставить пользователю окно с информацией о том, что последний выход из системы был неверным, и принять какое-либо событие от этого пользователя для обновления времени, или вы можете попросить пользователя ввести время выхода из системы (расчетное) для поздней сессии или, если пользователи не заинтересованы в выборе времени, вы можете обновить выход из системы.со временем выхода из системы.сделать клеветнический интервал продолжительности входа в систему.

думай так ...... ...... 1009 *

1 голос
/ 29 мая 2013

Вместо того чтобы создавать базовый контроллер и расширять все остальные контроллеры, мы можем создать и использовать плагин 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
        .....

    }
}

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

...