2016-07-17 10 views
1

Ich möchte eine Liste aller eingeloggten Benutzer anzeigen, die ich in meiner yii2-Anwendung verwalten kann. Im Moment verwende ich eine boolesche Variable 'is_login', die gesetzt wird, wenn sich der Benutzer an- und abmeldet, wenn sich der Benutzer abmeldet. Jetzt ist das Problem, wenn Benutzer den Browser schließen, ohne sich abzumelden, wird es in angemeldeten Benutzern angezeigt. wie man nur aktive Benutzer anzeigt.Wie bekomme ich eine Liste aller eingeloggten Benutzer in Yii2?

Ich denke nicht, Speichern von Benutzeraktivität bei jedem Klick oder wann immer er/sie etwas auf der Website ist der richtige Weg, das macht Website zu viel umständlich? Ich frage nach, ob es eine Standardmethode oder -weise dafür in Yii2 gibt.

+1

Mögliches Duplikat von [Wie man sieht, ob ein Benutzer online auf einer Website mit php und mysql getriebenen Datenbanken ist?] (Http://stackoverflow.com/questions/8026263/how-to-see-if-a-user -is-online-in-einer-website-mit-php-und-mysql-driven-datenbanken) –

+0

Sieht aus wie hier ist Ihre Lösung: https://github.com/samdark/yii2-cookbook/issues/92 – oakymax

Antwort

4

Der richtige Weg ist hier, direkt mit einer Liste aktiver Sitzungen zu arbeiten. Standardmäßig werden Sitzungen im Dateisystem gespeichert (jeweils in einer eigenen Datei) und es kann unbequem sein, mit ihnen zu arbeiten. Es wird viel einfacher für Sie sein, wenn Sie yii\web\DbSession Speicher anstelle von Standard yii\web\Session verwenden. Dann können Sie alle Sitzungen direkt aus der Datenbank abfragen.

Hier Empfehlung s‘samdark: https://github.com/samdark/yii2-cookbook/issues/92

kann mithilfe von DB-Sitzungen und Schreiben zusätzliche Informationen in die Tabelle gelöst werden:

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

Dann ist es leicht zu verarbeiten es über SQL:

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

P.S. Vor der Verwendung dieser Konfiguration sollten Sie eine Migration durchführen, um Ihrer Datenbank session Tabelle hinzuzufügen und die Felder user_id und last_write hinzuzufügen.

Standardmigrationen sind unter diesem Pfad: vendor/yiisoft/yii2/web/migrations.

Oder einfach nur so etwas wie dies ausführen (sollten Sie mit Ihrem Fall angenommen werden):

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

Um mehr über Sitzungen in Yii2 Besuch Führer this section von Yii2 zu lernen.

Verwandte Themen