7

Zend Frameworkを使用して、現在オンラインになっている、またはWebサイトでアクティブなセッションを行っているユーザーの数を取得する方法を知りたいです。

セッション保存パスを読み取る通常の方法を試しましたが、Zendを使用しても機能しません。ここの誰かが、いつでもサーバー上にアクティブなセッションがいくつあるかを知るための良い方法を私に提案できますか?

4

3 に答える 3

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();
    }
}

これで、「ベース」コントローラーに任意のコードを追加できます。DoctrineユーザーオブジェクトでZend_Authを使用しているため、最終的な「ベース」コントローラーは次のようになります。

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分以内に表示されたユーザーを選択してリストを表示できます。

于 2011-12-13T19:01:40.380 に答える
2

これを行うためにセッションを使用することはできません。オンラインユーザーをDBに保存し、アクティブなすべてのユーザーを表示する必要があります。ログアウト時に、dbからレコードを削除/更新します。

または、ユーザーテーブルにフラグを設定し、ユーザーがログイン/ログアウトするたびにフラグをy/nとして更新します。

またはこれに似たもの。

ユーザーがログアウトせずにブラウザを閉じた場合、次にユーザーがログインしようとしたときに、そのユーザーの以前のアクティブなセッションを確認できますか?最後のログアウトが正しくなかったことをユーザーにウィンドウを表示し、そのユーザーからのイベントを取得して時間を更新するか、ユーザーに遅延セッションのログアウト時間(推定)を入力するように依頼するか、ユーザーが時間を選択することに興味がない場合は、ログアウトを更新できますログアウト時間付き。ログイン期間の間隔を空けてください。

このように考える......

于 2010-12-09T02:09:04.303 に答える
1

ベースコントローラーを作成し、そこから他のすべてのコントローラーを拡張する代わりに、Zend Front Controllerプラグイン(ここの例を参照)を作成して使用し、すべてのリクエストをWebサイトまたは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
        .....

    }
}

次に、アクティブユーザーなどをカウントします。

于 2013-05-29T08:08:32.490 に答える