如何使用Zend Framework检查登录的在线用户

时间:2010-12-09 00:29:54

标签: zend-framework zend-session

我想知道如何使用Zend Framework获取当前在线或在网站上拥有活动会话的用户数。

我尝试了常用的方法来读取Session保存路径,但是它不能使用Zend。这里的任何人都可以建议我一个很好的方法来了解服务器上任何时候有多少活动会话。

3 个答案:

答案 0 :(得分:4)

最近有这个问题。像这样解决了:

通常控制器是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

重要的是,记得始终在控制器的init()部分调用parent :: init()(无论如何这都是好的做法)

class IndexController extends ME_Controller_Base
{
    public function init()
    {
        parent::init();
    }
}

现在您可以将任何您喜欢的代码添加到“Base”控制器中。当我们将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()方法只是将“updated”字段设置为当前日期并刷新用户。然后,您可以选择在最近X分钟内看到的用户来显示列表。

答案 1 :(得分:2)

您无法使用会话执行此操作,您必须将在线用户存储在数据库中并显示所有活动的人员。登出db中的删除/更新记录。

每次用户登录/注销时,

或在ur users表中放置一个标志并将标志更新为y / n。

或类似的东西。

如果用户在没有注销的情况下关闭浏览器,那么当下次用户尝试登录时,您可以检查该用户以前的活动会话,如果有的话?为用户提供上次注销不正确的窗口并从该用户获取任何事件以更新时间,或者您可以要求用户输入延迟会话的注销时间(估计),或者如果用户不想选择时间,则可以更新注销退出时间。制作登录持续时间的诽谤间隔。

像这样思考......

答案 2 :(得分:1)

我们可以创建和使用Zend Front Controller插件(请参阅示例here)来注册所有请求到我们的网站或Web应用程序,而不是创建基本控制器并从中扩展所有其他控制器。

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
        .....

    }
}

然后我们计算活跃用户等等。