Hallo zusammen,
2 Fragen zum Thema Sessions, dafür muss ich aber ein wenig ausholen:
Ich habe mir ein Login-System folgendermaßen gebastelt:
index.php -> enthält das Formular zur Eingabe von Benutzername und Passwort und verweist auf die login.php
login.php -> hier werden die eingegeben Formulardaten mit denen in der DB überprüft, und entweder wird auf die nächste Seite (home.php) oder zurück auf die index.php verwiesen. Desweiteren erstelle und registriere ich hier Sessionvariablen (a la $_SESSION["login_id"] = $data["id"]; ) und trage die session_id in die DB ein.
Auf der home.php und den Nachfolge-Seiten wird natürlich als erstes immer die Überprüfungs-Seite eingelesen (per include), um festzustellen, ob man eingeloggt ist oder nicht.
Überprüfungsseite (check.php):
session_start ();
if (!isset ($_SESSION["login_id"]))
{
header ("Location: error.php");
}
Natürlich gibt es noch die obligatorische logout.php, wo die Session beendet wird, und der Wert in der DB wieder auf NULL gesetzt wird. So weit, so gut.
Jetzt habe ich natürlich durch unermüdliches Suchen und Stöbern in den Foren festgestellt, das es ja eingeloggte Benutzer geben könnte, die sich nicht über "LOGOUT" ausloggen, sondern einfach nur den Browser schliessen.
Jetzt möchte ich gerne
1. Beim Login neben der Session_ID auch das Datum des Logins in die DB übertragen (als timestamp).
2. Dann sollte ja auch beim Aufruf jeder Seite der Timestamp aktualisiert werden. Das hätte ja den Vorteil, das, wenn der Browser geschlossen wird, Timestamp nicht mehr aktualisiert wird.
Frage 1: Würde es genügen, in der o.g. Datei check.php (weil die ja sowieso immer von jeder Seite aufgerufen wird) mittels ...else... ein Update in der DB des Timestamps zu erzeugen?
Frage 2: Wo könnte ich die Abfrage hinsetzen, das, wenn seit z.B. 10 Minuten kein Timestamp aktualisiert wurde, die session_id in der DB wieder auf NULL gesetzt wird und einen Verweis unterbringen a la "Sie haben seit 10 Minuten keine Aktivität gezeigt, bitte neu einloggen." ?
Muss ich dafür eine neue Datei includen auf jeder Seite im "geschützten Bereich" oder kann ich das irgendwie noch auf der o.g. Datei unterbringen.
Und irgendwo hab ich gelesen, das das (oder der) timestamp in sql ein anderes Format besitzt als in php, stimmt das? Da müsste ich das doch irgendwie anpassen.
P.S. Ich habe keinen Zugriff auf die php.ini, wo cih die Dauer der Session beeinflussen könnte.
Ein Tipp wäre toll
Liebe Grüße
Stefan
2 Fragen zum Thema Sessions, dafür muss ich aber ein wenig ausholen:
Ich habe mir ein Login-System folgendermaßen gebastelt:
index.php -> enthält das Formular zur Eingabe von Benutzername und Passwort und verweist auf die login.php
login.php -> hier werden die eingegeben Formulardaten mit denen in der DB überprüft, und entweder wird auf die nächste Seite (home.php) oder zurück auf die index.php verwiesen. Desweiteren erstelle und registriere ich hier Sessionvariablen (a la $_SESSION["login_id"] = $data["id"]; ) und trage die session_id in die DB ein.
Auf der home.php und den Nachfolge-Seiten wird natürlich als erstes immer die Überprüfungs-Seite eingelesen (per include), um festzustellen, ob man eingeloggt ist oder nicht.
Überprüfungsseite (check.php):
session_start ();
if (!isset ($_SESSION["login_id"]))
{
header ("Location: error.php");
}
Natürlich gibt es noch die obligatorische logout.php, wo die Session beendet wird, und der Wert in der DB wieder auf NULL gesetzt wird. So weit, so gut.
Jetzt habe ich natürlich durch unermüdliches Suchen und Stöbern in den Foren festgestellt, das es ja eingeloggte Benutzer geben könnte, die sich nicht über "LOGOUT" ausloggen, sondern einfach nur den Browser schliessen.
Jetzt möchte ich gerne
1. Beim Login neben der Session_ID auch das Datum des Logins in die DB übertragen (als timestamp).
2. Dann sollte ja auch beim Aufruf jeder Seite der Timestamp aktualisiert werden. Das hätte ja den Vorteil, das, wenn der Browser geschlossen wird, Timestamp nicht mehr aktualisiert wird.
Frage 1: Würde es genügen, in der o.g. Datei check.php (weil die ja sowieso immer von jeder Seite aufgerufen wird) mittels ...else... ein Update in der DB des Timestamps zu erzeugen?
Frage 2: Wo könnte ich die Abfrage hinsetzen, das, wenn seit z.B. 10 Minuten kein Timestamp aktualisiert wurde, die session_id in der DB wieder auf NULL gesetzt wird und einen Verweis unterbringen a la "Sie haben seit 10 Minuten keine Aktivität gezeigt, bitte neu einloggen." ?
Muss ich dafür eine neue Datei includen auf jeder Seite im "geschützten Bereich" oder kann ich das irgendwie noch auf der o.g. Datei unterbringen.
Und irgendwo hab ich gelesen, das das (oder der) timestamp in sql ein anderes Format besitzt als in php, stimmt das? Da müsste ich das doch irgendwie anpassen.
P.S. Ich habe keinen Zugriff auf die php.ini, wo cih die Dauer der Session beeinflussen könnte.
Ein Tipp wäre toll
Liebe Grüße
Stefan
Kommentar