Session automatisch beenden

flying-anzi

Erfahrenes Mitglied
Hallo hab mal ne Frage zu Sessions

Ich habe in meiner datenbank eine spalte in die die aktuelle Zeit gespeichert wird...
Wenn der User jetzt zb 5 min nicht reloadet soll die Session des User auf 0 gestezt werden... und das soll auch in dem fall funktionieren wenn das fenster bereits geschlossen ist...


danke schon mal im voraus...:-)
 
Hi,

zum Einen: Sessions werden beim "Schliessen des Fensters" sowieso wieder gelöscht, also brauchst Du Dich darum schonmal nicht zu kümmern. ;)

zum Anderen: Man kann in der PHP.INI einstellen, wie lange eine Session gültig ist. Da Du an diese Einstellung aber im Normalfall nicht dran kommst, hilft nur, die Session-Laufzeit per Script zu überwachen. Dazu müsstest Du allerdings bei jeder Aktion des Users die aktuelle Systemzeit in eine Variable schreiben, und diese dann mit der zuletzt gespeicherten vergleichen. Sind mehr als 5 Minuten vergangen, dann wird die Session per Script wieder gelöscht.

Einfacher geht das sicherlich mit Cookies, da Du hier die "Lebenszeit" des Cookies mit angeben kannst. ;)
 
so..

bei mir werden die session variable in einer db gespeichert und die sollen auf null gestezt werden wenn 5 minuten ohne aktuaklisierung vergangen sind...
 
also sorry dass ich da jetzt so rein schreib und sorry das es dir nicht wirklich helfen wird, aber ich würde nie sessions in die db schreiben! denn sessions werden bei jedem seitenaufruf benutzt und wenn dein script nun von vielen genutzt werden soll heißt das massig (unnötigen) datenbank traffic....

denn warum sollte eine session in die db?

außerdem was steht in der session in der db? session_id() oder eine $_SESSION['name'] oder so?

wenn es session_id() ist kannst du ja statt session_id() in die db zu schreiben auch $_SESSION['time'] reinschreiben oder so....
 
Zuletzt bearbeitet von einem Moderator:
also sorry dass ich da jetzt so rein schreib und sorry das es dir nicht wirklich helfen wird, aber ich würde nie sessions in die db schreiben! denn sessions werden bei jedem seitenaufruf benutzt und wenn dein script nun von vielen genutzt werden soll heißt das massig (unnötigen) datenbank traffic....

denn warum sollte eine session in die db?

außerdem was steht in der session in der db? session_id() oder eine $_SESSION['name'] oder so?

wenn es session_id() ist kannst du ja statt session_id() in die db zu schreiben auch $_SESSION['time'] reinschreiben oder so....

Ahja und Datenbank Traffic unterscheid sich wodurch genau vom Filetraffic den es braucht um die temporäre Session Datei zu öffnen?
Eine Datenbank kann da bei großen Seiten sogar schneller sein (ist es soweit ich weiß auch) als das "schnöde" Dateisystem eines Webservers.
 
Speichere einfach in der Sitzung den Verfallszeitpunkt, der bei jedem Aufruf aktualisiert wird. Ist der Zeitpunkt bereits vergangen, wird die Sitzung gelöscht, sollte sie noch nicht vom System gelöscht worden sein.
PHP:
session_start();
if( isset($_SESSION['expires']) && $_SESSION['expires'] < $_SERVER['REQUEST_TIME'] ) {
	session_destroy();
	if( isset($_COOKIE[session_name()]) ) {
		setcookie(session_name(), null, 0);
	}
	session_start();
	session_regenerate_id();
}
$_SESSION['expires'] = $_SERVER['REQUEST_TIME'] + 300;
 
Zurück