正しい方法は、アクティブなセッションのリストで直接作業することです。デフォルトでは、セッションはファイルシステムに格納されており、それぞれのファイルで作業するのは不便です。デフォルトの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_id
とlast_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内のセッションの詳細については。
[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) –
あなたのソリューションは次のように見えます:https://github.com/samdark/yii2-cookbook/issues/92 – oakymax