2016-07-17 8 views
1

yii2アプリケーションで管理者にログインしているすべてのユーザーのリストを表示します。今私はブール変数 'is_login'を使用しています。この変数は、ユーザーがログインしたときに設定され、ユーザーがログアウトすると設定解除されます。今問題は、ユーザーがログアウトせずにブラウザを閉じるとログインしたユーザーに表示されることです。アクティブなユーザーのみを表示する方法。Yii2でログインしているすべてのユーザーのリストを取得するには?

クリックごとにユーザーアクティビティを保存したり、ウェブサイト上で何か操作を行うと、ウェブサイトがあまりにも面倒になります。 Yii2で標準的な方法や方法があるかどうか聞いています。

+1

[phpとmysql主導のデータベースを持つWebサイトでユーザーがオンラインになっているかどうかを確認する](http://stackoverflow.com/questions/8026263/how-to-see-if-a-user) -is-online-in-a web-with-php-and-mysql-driven-databases) –

+0

あなたのソリューションは次のように見えます:https://github.com/samdark/yii2-cookbook/issues/92 – oakymax

答えて

4

正しい方法は、アクティブなセッションのリストで直接作業することです。デフォルトでは、セッションはファイルシステムに格納されており、それぞれのファイルで作業するのは不便です。デフォルトのyii\web\Sessionの代わりにyii\web\DbSessionのストレージを使用すると、はるかに簡単になります。その後、データベースからすべてのセッションを照会することができます。ここで

samdarkさんの推薦である:https://github.com/samdark/yii2-cookbook/issues/92

はDBセッションを使用してテーブルに追加情報を書き込むことによって解決することでした:

'session' => [ 
    'class' => 'yii\web\DbSession', 
    'writeCallback' => function ($session) { 
     return [ 
      'user_id' => Yii::$app->user->id, 
      'last_write' => time(), 
     ]; 
    }, 
], 

そして、それはで動作するように簡単ですSQLを介して:

-- Get all users active in recent hour 
SELECT user_id FROM session WHERE last_write - 3600 < :now; 

P.S.この設定を使用する前に、sessionテーブルをデータベースに追加し、フィールドuser_idlast_writeを追加するために移行を実行する必要があります。

デフォルトの移行は、このパスの下にあります。vendor/yiisoft/yii2/web/migrations

それとも、(あなたのケースに採用されなければならない)、このような何かを実行します。

CREATE TABLE session 
(
    id CHAR(40) NOT NULL PRIMARY KEY, 
    expire INTEGER, 
    data BLOB, 
    user_id INTEGER, 
    last_write TIMESTAMP 
) 

がYii2ガイドのYii2訪問this section内のセッションの詳細については。

関連する問題