Sessionparameter

Acriss

Gesperrt
Hi,
ich habe ewig nicht mehr mit Sessions gearbeitet,
und würde gerne eine Session nach ablauf von 1h killen.
Wie realisiere ich das?
 
Speichere einfach wie Tchibomann beschrieb den Zeitpunkt der Initialisierung der Sitzung in der Sitzung selbst. Nach Ablauf kannst du sie dann entwerten.
PHP:
session_start();
if( !isset($_SESSION['EXPIRES']) ) {
	session_regenerate_id(true);
	$_SESSION['EXPIRES'] = $_SERVER['REQUEST_TIME'] + 3600;
}
if( $_SESSION['EXPIRES'] < $_SERVER['REQUEST_TIME'] ) {
	session_destroy();
}
 
Ich knüpfe hier einfach mal an, weil ich mich die Tage damit auch beschäftigt
hatte und auf ein Problem gestoßen bin.

PHP:
        if(!isset($_SESSION['EXPIRES'])) {             
            $_SESSION['EXPIRES'] = time() + 300; 
        }
        if($_SESSION['EXPIRES'] < time()) {
            session_destroy(); 
        } else {
            $_SESSION['EXPIRES'] = time() + 300;
        }


Genutzt wird das in einem Login System. Falls fünf Minuten lange keine Interaktion
vom User kam, soll beim nächsten Seitenaufruf die Session zersört werden.

Funktioniert aber nicht so wie ich mir das vorgestellt habe. Ist die Zeitspanne
abgelaufen und man ruft wieder eine Seite auf, so ist die Session noch vorhanden,
erst beim nächsten, also zweiten Aufruf wird diese zerstört.

Wenn ich nach dem session_destroy zum Beispiel per header() umleite ist das
natürlich gelöst. Aber ich verstehe gerade nicht mal wo mein Denkfehler liegt?

Und kann man das irgendwie anders lösen? Danke.
 
Zuletzt bearbeitet:
Der Denkfehler dürfte dort liegen, dass, wenn du die Seite nach 5 Minuten neu aufrufst, jedesmal neu das $_SESSION['EXPIRES'] auf time() + 300 setzt...
so kann sie ja nie ablaufen ;)
 
Der Denkfehler dürfte dort liegen, dass, wenn du die Seite nach 5 Minuten neu aufrufst, jedesmal neu das $_SESSION['EXPIRES'] auf time() + 300 setzt...
so kann sie ja nie ablaufen ;)

Nein, die Session wird nur verlängert wenn man innerhalb der fünf Minuten
eine neue Seite aufruft, und auch ohne dem verlängern der Session bleibt
das Problem bestehen.

PHP:
        if(!isset($_SESSION['EXPIRES'])) {             
            $_SESSION['EXPIRES'] = time() + 300; 
        }
        if($_SESSION['EXPIRES'] < time()) {
            session_destroy(); 
        }

Um das nochmal genauer zu beschreiben. Um 15 Uhr wird $_SESSION['EXPIRES'] gesetzt und zwar auf 15:05 Uhr. Der nächste Seitenaufruf findet nun um 15:07 Uhr
statt, bei diesem Aufruf wird die Session auch zerstört, allerdings ist sie bei diesem
Aufruf noch verfügbar:

PHP:
$_SESSION['EXPIRES'] = time() + 300;
session_destroy();
$_SESSION[] # noch vorhanden

Wird jetzt um 15:08 Uhr die nächste Seite aufgerufen so ist die Session nicht
mehr verfügbar.
 
Die Reihenfolge ist wie im letzten geposteten Code Block.


PHP:
    session_start(); 
    
    /* Datenbankabfrage und bei korrekten Daten setzen 
    der Session Variable $_SESSION['logged_in'] */

    if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) { 
    
        if(!isset($_SESSION['EXPIRES'])) {             
            $_SESSION['EXPIRES'] = time() + 300; 
        }
        if($_SESSION['EXPIRES'] < time()) {
            $_SESSION = array()
            session_destroy(); 
        } else {
            $_SESSION['EXPIRES'] = time() + 300;
        }
        
    } 


    /* beginn des HTML Dokuments*/
    /* <body> */
    /*  hier kann ich die Session Variablen noch ausgeben lassen */
    /* </body>*/

Ok, einfach mal die Doku richtig lesen, $_SESSION = array(); löst das Problem.


Außerdem frage ich mich
, wenn zusätzlich ich session_regenerate_id() einsetzen möchte,
an welcher Stelle ich das machen muss und wie ich das richtig mache?
 
Zuletzt bearbeitet:
Zurück