Probleme mit AutoLogout

Kalma

Erfahrenes Mitglied
Hey Leude,

ich hab eine kleine AutoLogoutFunktion geschrieben, die nach 5 Minuten oder so automatisch ausloggen soll. Das tuts aber nicht wirklich.. Hier das Script:

PHP:
	function auto_logout()
	{
		$logged_in_time = $_SESSION['user_logged_in_time'];
		$logged_out_time = $_SESSION['user_logged_in_time']+(1*60);
		
		if($logged_in_time > $logged_out_time) {
			//user_isonline auf null setzen
			$query	= 'UPDATE user SET `user_isonline`=0 WHERE `user_id`="'.$_SESSION['user_id'].'"';
			$result	= mysql_query($query);
			
			//sessions leer machen und zerstören
			$_SESSION['user_id']				= '';
			$_SESSION['user_nickname'] 			= '';
			$_SESSION['user_logged_in_time'] 	= '';
			session_destroy();
		
			if ($result == true) {
				//weiterleiten und script beenden
				header('location: index.php');
			}
			exit;
		}
	}

Wär cool wenn ihr mir helfen könntet.

David
 
Die Bedingung „$logged_in_time > $logged_out_time“ wird immer wahr sein, weil die Differenz beider Werte immer 60 ist.
 
ja, denn mit einer Session kannst du nicht arbeiten, da die sich dem Klick eines Benutzers aktualisiert.

Datenbankspalte Letzte_Aktion o.ä. erstellen, die bei jedem Klick eines Users mit der aktuellen Uhrzeit geupdatet wird.

Query schreiben, der alle user ausloggt, deren Differenz zwischen JETZT und ihrer Letzte_Aktion 5 minuten überschreitet (wobei das schon sehr kurz gewählt ist :P)
 
JO, hab jetzt 2 Spalten gemacht:

user_loggedin_time (int)
und
user_loggedout_time (int)

Aber, mir fällt grad ein, das ich die 2. gar nicht brauch :P


Also, ich habs jetzt so, aber der macht das immer noch nicht:
PHP:
	function auto_logout()
	{
		$query 	= 'SELECT * FROM user WHERE `user_id`="'.$_SESSION['user_id'].'" LIMIT 1';
		$result	= mysql_query($query) or die(mysql_error());
		$select	= mysql_fetch_array($result);
		$logged_in_time = $select['user_loggedin_time'];
		$logged_out_time = $logged_in_time+(1*60);
		
		//in sessions schreiben^^
		$_SESSION['user_logged_in_time'] 	= $logged_in_time;
		$_SESSION['user_log_out_time'] 		= $logged_out_time;
		
		if($logged_in_time > $logged_out_time) {
			//user_isonline auf null setzen
			$query	= 'UPDATE user SET `user_isonline`=0, `user_loggedin_time`=0, `user_loggedout_time`=0 
					  WHERE `user_id`="'.$_SESSION['user_id'].'" LIMIT 1';
			$result	= mysql_query($query) or die(mysql_error());
			
			//sessions leer machen und zerstören
			$_SESSION['user_id']				= '';
			$_SESSION['user_nickname'] 			= '';
			session_destroy();
		
			if ($result == true) {
				//weiterleiten und script beenden
				header('location: index.php');
			}
			exit;
		}
	}
 
Zuletzt bearbeitet:
Irgendwie verstehe ich den Sinn der Funktion nicht ganz, denn das automatische Ausloggen ist direkt von der ID einer aktiven Sitzung abhängig. Das bedeutet dann, dass nur während einer aktiven Sitzung automatisch ausgeloggt werden kann. Aber wozu das?
 
Ich habe in der Tabelle eine Zeile `user_isonline`, wenn der User eingeloggt ist, ist dort eine 1, und wenn ausgeloggt eine 0.

Wenn der User aber nicht mehr auf der Seite ist, ist er ja theoretisch ausgeloggt, aber wenn er nicht auf ausloggen geklickt hat, wird die 0 nicht eingetragen und er wird als Online markiert.

Darum will ich, das er nach irgend einer Zeit wie z.b.: 10 Minuten automatisch ausgeloggt wird.
 
Protokolliere einfach jede Aktion des Benutzers und aktualisiere dabei den Zeitpunkt der Aktion. Dann kannst du ganz einfach abfragen, welcher Benutzer seit wann inaktiv war und ihm somit als „offline“ bezeichnen.
 
Zurück