0

データベースでのユーザーの最後の訪問の更新を実装する適切な方法は何ですか?

users テーブルに列 last_visit があり、このコードを bootstrap.php ファイルに追加しました

protected function _initUser() {
        $this->bootstrap(array('db'));

        $auth = Zend_Auth::getInstance();
        $identity = $auth->getIdentity();
        if($identity) {
            $userModel = new Model_User();
            $user_id = $identity->id;
            $userModel->updateLastVisit($user_id, date("Y-m-d H:i:s"));
        }
    }

それはいいですか?または、この別の方法を行う必要がありますか?

編集

私はこれをやってしまったので、データベースは5分ごとに1回だけクエリされます. そのままにしておくことはできますか、それとも (パフォーマンスの観点から) より適切に機能させるために必要な変更は他にありますか?

protected function _initUser() {

    $auth = Zend_Auth::getInstance();
    if($auth->hasIdentity()) {
        $currentUser = $auth->getIdentity();
        if((time() - strtotime($currentUser->last_visit)) > 60*5) {
            $last_visit = date("Y-m-d H:i:s");
            $currentUser->last_visit = $last_visit;
            $this->bootstrap(array('db'));
            $user = new Model_User();
            $user->updateLastVisit($currentUser->id, $last_visit);
        }
    }
}
4

3 に答える 3

0

最終ログイン: LoginController の日時を更新します。例: https://gist.github.com/2842698 (100 行目)、または Keyne が既に言ったように、特別なプラグインに入れます。

前回のアクセス:このデータを一時的にキー値ストレージ (memashed) に入れ、5 分ごとに cron ジョブでデータを保存します。したがって、DB にパフォーマンスの問題はありません。

于 2012-09-05T15:19:23.153 に答える
0

ユーザーがログインしているかどうかを確認するときと同じように、リクエストをディスパッチするときにプラグイン フックを使用してこの種の操作を実行する必要があります。アプリケーションの分野横断的な関心事 (アスペクト指向プログラミングを参照)。

アクセスチェックプラグイン内でこの操作を実行することもできます .

于 2012-09-01T02:54:47.710 に答える
0

速度に問題がなければOKです。これで、リクエストごとに一連の操作ができました (非常に単純に見えますが、Zend はこれら 2 行の背後で多くの作業を行います)。そして、数十ミリ秒戦う場合、これらの行は改善の最初の候補の 1 つです。最新の可能な値を持つ必要はないと思います。そのため、ログイン後、または「remember me」が有効になっているためにユーザーが自動的にログインしたときに、last_visit を更新するだけで十分です。

于 2012-09-01T01:53:53.523 に答える