Session: Cookie lifetime erweitern



  • Hi!

    Auf meiner Seite mit Sessions wird für nicht eingeloggte Nutzer die default cookie lifetime gesetzt (0, bis Browser schließt).
    Geht der Nutzer dann aber auf die Login-Seite und loggt sich ein, will ich per session_set_cookie_params(...) eine längere Cookie-Lebenszeit setzen (Wie der Nutzer sie beim Login wählt zB.).
    Doch dies funktioniert nicht, weil schon ein Cookie vorhanden ist, nämlich von vorhin mit der Lebenszeit 0.

    Öffnet der Nutzer den Browser neu und loggt sich gleich mit einem Seitenaufruf ein, funktioniert es, da noch kein Cookie vorhanden ist.

    Muss ich nun jedes mal beim Login zunächst die Session starten, das Cookie mit lifetime 0 löschen, die Session schließen, die Session erneut starten und ein neues Cookie mit mehr lifetime setzen?

    Oder wie macht man das?

    Danke!



  • Ist das die Lösung: session_set_cookie_params(0, 0, 0, false, false);

    Also für User, die nicht eingeloggt sind, wird so gar kein Cookie gesetzt. Wenn man sich dann einloggt, funktioniert auch das Cookie erstellen mit einer bestimmten Lebenszeit, da ja noch keines vorhanden ist bzw. wenn eines vorhanden ist, dann von einer vorherigen Session und mit Lifetime > 0.

    😕



  • Oder...

    if(!isset($_COOKIE["sid"]))
    	ini_set("session.use_cookies", false);
    

    😕



  • Hallo,

    deine Lösungsvorschläge ändern die "Lebenszeit" der Cookies in der php.ini und somit ist das dann für alle gültig! Wieso überschreibst du nich einfach den alten Cookie?

    LG, Micha



  • Wie ich schon geschrieben habe:
    Es funktioniert nicht. Wenn ein Cookie "sid" vorhanden ist, und ich auf der Login-Seite per session_set_cookie_params() die Lifetime setzen will, funktioniert es nicht.
    Der Wert des Cookies bleibt gleich (0, Bis der Browser geschlossen wird).
    Neu anlegen mit einer bestimmten Lebenszeit geht, aber überschreiben geht anscheinend nicht.

    (ini_set() ist ja außerdem nur bis Skriptende, nicht? Und falls dann ein Login stattfinden sollte, könnte ich es damit ja wieder zurücksetzen).



  • Hallo,

    also bei jedem Login die PHP-Config zu ändern halt ich für übertrieben!
    Mich wunderts dass du die Cookies nicht überschreiben kannst! Ich dächte das hat bei mir immer problemlos funktioniert, aber ich werde es dann nochmal probieren :)!

    Dann wirst du wohl nicht darum kommen den Cookie neu zu schreiben. Oder du machst zwei verschiedene Cookies. Oder du erweiterst den Inhalt des zuvor geschriebenen Cookie's!

    LG, Micha



  • Ja, wie neuschreiben...
    Aber am liebsten würde ich für nicht eingeloggte User erst gar kein cookie anlegen.



  • So, mal getestet. Vereinfacht:

    site.php

    setcookie("sid", "123", 0, "/", "127.0.0.1", false, true);
    

    login.php

    setcookie("sid", "123", time() + 60 * 60 * 24, "/", "127.0.0.1", false, true);
    

    Funktioniert:
    site.php wird aufgerufen -> Cookie mit lifetime 0 wird angelegt.
    login.php wird aufgerufen -> Cookie mit lifetime 0 wird erweitert zu lifetime 1 day.

    site.php

    session_name("sid");
    
    session_set_cookie_params(0, "/", "127.0.0.1", false, true);
    
    session_start();
    
    echo $_SESSION["online"];
    

    login.php

    session_name("sid");
    
    session_set_cookie_params(30, "/", "127.0.0.1", false, true);
    
    session_start();
    
    $_SESSION["online"] = 1;
    

    Funktioniert nicht:
    site.php wird aufgerufen -> Cookie mit lifetime 0 wird angelegt.
    login.php wird aufgerufen -> Cookie mit lifetime 0 bleibt unverändert!

    Hmm... muss ich jetzt manuell setcookie() verwenden?



  • Ok hab die Antwort, ja man muss setcookie() verwenden, um die Laufzeit zu verlängern.

    Eine Frage noch:
    Für nicht eingeloggte user wird ja duch session_start() zwangsweise ein cookie mit lifetime 0 angelegt. OK soweit.
    Wenn sich ein user nun einloggt, wird die lifetime des cookies mit setcookie() erhöht (zB. Auf einen Wert, den der user beim einloggen wählt).

    Aber: Muss ich dann auch immer session_set_cookie_params() mit dieser neuen lifetime setzen? Oder kann diesen Aufruf einfach grundsätzlich weglassen?

    Habe mal irgendwo gelesen, dass der Lebenszeit-Wert von session_set_cookie_params() immer dem Wert vom angelegten cookie entsprechen soll.
    Aber wenn man die Funktion einfach gar nicht aufruft...

    😕

    Thanks!


Anmelden zum Antworten