Session nach n Sec/Min/Std automatisch ungültig machen
3gx
- php
Moin moin,
wie kann man das machen, das eine SessionID automatisch ungültig wird nach einer bestimmten Zeit? Also wenn ich mich heute z.B. "example.com/foo.php?PHPSESSID=af64fd564b..." aufrufe, dann kommt meinetwegen "Text blah irgendwas...". Und wenn ich beispielsweise diese URI nach 20 Minuten wieder aufrufe (ohne in der zwischenzeit aktiv gewesen zu sein!) der Text kommt "Bitte loggen sie sich erneut ein... SESSION ungültig...blah" und eine neue SESSION generiert wird? ...Geht das überhaupt? Wenn ja, wie ist das mit den Session-Dateien auf dem Server meines Providers, wann werden die wieder gelöscht? ...
Danke schonmal im voraus!
Hallo,
frohes Neues!
Ich glaube da musst du zwei Dinge trennen, zum einen deine Meldung und zum anderen die Session:
1. Die Meldung:
Am Besten prüfst du auf einen Session-Parameter
if (!isset($_SESSION['ist_bereits_bekannt'])) {
$_SESSION['ist_bereits_bekannt'] = true;
}
if (!($_SESSION['ist_bereits_bekannt'])) {
echo "Sie sind nicht angemeldet...";
exit;
}
2. Die Session:
Dafür gibt es je nach Sprache Konfigurationswerte, ich glaube in der PHP.ini gibt es einen Session-Timeout oder Session-Expires oder so, das ist aber i.d.R. vom Provider festgelegt, wie lange die Sessions halten. Danach zerstört der Server die Session und das Session-File und damit greift auch automatisch die 1. Abfrage wieder...
Rouven
Danke ..hat mir durchaus weitergeholfen :) ...
besonders "2." ...gut zu wissen.
Gutes Jahr wünsch ich noch.
Moin!
wie kann man das machen, das eine SessionID automatisch ungültig wird nach einer bestimmten Zeit? Also wenn ich mich heute z.B. "example.com/foo.php?PHPSESSID=af64fd564b..." aufrufe, dann kommt meinetwegen "Text blah irgendwas...". Und wenn ich beispielsweise diese URI nach 20 Minuten wieder aufrufe (ohne in der zwischenzeit aktiv gewesen zu sein!) der Text kommt "Bitte loggen sie sich erneut ein... SESSION ungültig...blah" und eine neue SESSION generiert wird? ...Geht das überhaupt? Wenn ja, wie ist das mit den Session-Dateien auf dem Server meines Providers, wann werden die wieder gelöscht? ...
Wenn du in der Session als Information jeweils die aktuelle Zeit speicherst, und beim Beginn jeder Seite vorher prüfst, ob die gespeicherte Zeit schon mehr als die maximal erlaubte Inaktivitätsdauer zurückliegt, kannst du die Meldung "Neu einloggen" bringen:
if ($_SESSION['last_active'] älter als 20 Minuten)
{
echo "Neu einloggen bitte";
}
else
{
$_SESSION['last_active'] = jetztzeit()
}
Zum echte Funktionen rausfummeln hab' ich gerade keine Lust. :)
Außerdem solltest du noch prüfen, ob die Session überhaupt schon existierte. Wenn nicht, dann kann $_SESSION['last_active'] natürlich auch nicht existieren, und man sollte sich dann auch neu (bzw. überhaupt erstmal) einloggen.
Der Session-Expires-Mechanismus von PHP könnte auch helfen, aber wer weiß, ob du den verändern kannst - ich müßte genau wie du bei http://www.php.net nachgucken, wie das ginge. Mit Pech geht das nur global für alle Nutzer in der php.ini.
- Sven Rautenberg
Danke Sven für die Antwort ... die Denkanstösse helfen durchaus weiter. Ein erfolgreiches 2003 wünsch ich noch.
Hi
Ich regel das darüber, das ich über date("U") anzeigen lassen und dann jedesmal wenn die Session neu geladen wird, frage ich, ob die Zahl kleiner ist als die angegebene Zhal + die Zeitverschiebung, wenn die Zahl kleiner ist, ist die Session abgelaufen. Wenn nicht, wird die Zahl aktualisiert.
Hier mein Code:
if ($sess_timeout+900 < date("U"))
{
session_unset();
if (session_destroy())
{
echo("<META HTTP-EQUIV=Refresh CONTENT="0; URL=index.php?ID=93&aktion=timeout">");
}
}
else
{
$sess_timeout = (date("U"));
}
Danke.
...Werd den Code mal einarbeiten :)