Salute a tutti!
Ich entwickle eine Benutzerverwaltung in PHP.
Bei dieser Benutzerverwaltung wird der Status eines Besuchers (eingeloggt oder nicht) in der Session gespeichert.
Alle benutzerbezogenen Daten in der Session werden nach einer konfigurierbaren Zeitspanne neu von der Datenbank gelesen:
Eine Anforderung ist jetzt, dass entsprechend berechtigte Benutzer andere Benutzer aus dem System kicken (=sperren) können.
Ich kann natürlich die entsprechenden Änderungen in der Datenbank vornehmen (Benutzer sperren und als abgemeldet kennzeichnen), aber...
Der Benutzer selbst bekommt davon ja für schlimmstenfalls self::CHECK_INTERVAL Sekunden nichts mit.
Ich suche also nach einer Möglichkeit, die Session des Benutzers zu bearbeiten (logged_in auf false setzen, forced_logout auf true setzen)
Mir ist dazu bis jetzt nur folgendes eingefallen:
Das funktioniert soweit einwandfrei, ich mache mir nur Sorgen, dass das unter bestimmten Umständen Probleme beim Einsatz von Frames machen könnte.
Wer beruhigt mich?
Wer sagt mir wie's sonst gehen könnte?
Ich entwickle eine Benutzerverwaltung in PHP.
Bei dieser Benutzerverwaltung wird der Status eines Besuchers (eingeloggt oder nicht) in der Session gespeichert.
Alle benutzerbezogenen Daten in der Session werden nach einer konfigurierbaren Zeitspanne neu von der Datenbank gelesen:
PHP-Code:
function logged_in() {
$time = time();
if ($_SESSION['last_check'] + self::CHECK_INTERVAL < $time)
return $_SESSION['logged_in'];
//Abfrage der Datenbank
$_SESSION['last_check'] = $time;
return $_SESSION['logged_in'];
}
Ich kann natürlich die entsprechenden Änderungen in der Datenbank vornehmen (Benutzer sperren und als abgemeldet kennzeichnen), aber...
Der Benutzer selbst bekommt davon ja für schlimmstenfalls self::CHECK_INTERVAL Sekunden nichts mit.
Ich suche also nach einer Möglichkeit, die Session des Benutzers zu bearbeiten (logged_in auf false setzen, forced_logout auf true setzen)
Mir ist dazu bis jetzt nur folgendes eingefallen:
PHP-Code:
function lock_user($id) {
$this->lock_user_db($id);
$user_session = $this->get_session_id_of_user($id);
if (!$user_session) {
//user is not currently logged in
return;
}
$own_id = session_id();
//save own session data
session_write_close();
//open user's session
session_name(self::SESSION_NAME);
session_id($user_session);
session_start();
//do the needed changes to the user's session
$_SESSION['logged_in'] = false;
$_SESSION['forced_logout'] = true;
//restore own session
session_write_close();
session_name(self::SESSION_NAME);
session_id($own_id);
session_start();
}
Wer beruhigt mich?
Wer sagt mir wie's sonst gehen könnte?
Kommentar