kostenloser Webspace werbefrei: lima-city


Session-Cookie entfernen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    voloya

    voloya hat kostenlosen Webspace.

    Hallo :wave:

    Ich würde gerne den Cookie einer PHP-Session entfernen.

    Erstellt wird mit:
    session_start();
    $_SESSION['user'] = $user;


    Beim Klick auf Logout wird folgender Code ausgeführt:
    session_start();
    session_destroy();


    Jedoch findet man bei den Cookies (in Firefox) immer noch einen Eintrag mit der Session ID. Wie kann ich den Eintrag denn vollständig entfernen?(geht das überhaupt?)

    mfg :wave:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. f**c

    Einfach den Cookie erneut setzen mit einer Lebenszeit in der Vergangenheit. :wink:

    // Falls die Session gelöscht werden soll, löschen Sie auch das
    // Session-Cookie.
    // Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000, $params["path"],
            $params["domain"], $params["secure"], $params["httponly"]
        );
    }

    Quelle: php.net
  4. Autor dieses Themas

    voloya

    voloya hat kostenlosen Webspace.

    Hallo :wave:

    finc schrieb:
    Einfach den Cookie erneut setzen mit einer Lebenszeit in der Vergangenheit. :wink:


    Heh, das funktioniert sogar. :biggrin: Brauche ich dann noch session_destroy(), damit die Session serverseitig beendet wird oder ist das damit schon geschehen?

    Jetzt habe ich nur das Problem, dass der Cookie bei einer Weiterleitung auf die Startseite wieder neu gesetzt wird.
    In der index.php habe ich "session_start()" im Beginn des Qelltexts, weil sonst nicht unterschieden werden kann ob ein Benutzer eingeloggt ist (-> control panel wird angezeigt) oder nicht (-> signup form wird angezeigt).

    Gibt es da auch einen workaround (außer eine neue Seite fürs Control Panel anzulegen)?

    mfg :wave:
  5. voloya schrieb:
    Hallo :wave:

    finc schrieb:
    Einfach den Cookie erneut setzen mit einer Lebenszeit in der Vergangenheit. :wink:


    Heh, das funktioniert sogar. :biggrin: Brauche ich dann noch session_destroy(), damit die Session serverseitig beendet wird oder ist das damit schon geschehen?

    Jetzt habe ich nur das Problem, dass der Cookie bei einer Weiterleitung auf die Startseite wieder neu gesetzt wird.
    In der index.php habe ich "session_start()" im Beginn des Qelltexts, weil sonst nicht unterschieden werden kann ob ein Benutzer eingeloggt ist (-> control panel wird angezeigt) oder nicht (-> signup form wird angezeigt).

    Gibt es da auch einen workaround (außer eine neue Seite fürs Control Panel anzulegen)?

    mfg :wave:


    Ja, du brauchst noch session_destory();, damit die Variablen gelöscht werd (oder session_unset();).

    Nein, leider wird mit $session_start(); immer ein neuer Session-Cookie gesetzt. Die einzige Möglichkeit ist, ein URL- oder POST-Parameter anzuhängen, mit dem dann auf der index session_start(); übersprungen wird (oder ein anderer Cookie, aber das wäre etwas sinnlos ;).
  6. session_destroy();
    zerstört die Session nur Serverseitig. Daraus folgt, dass die Session im Browsercache nutzlos wird. Die Session-Variablen zu löschen ist dabei nur Kosmetik. Für gewöhnlich wird beim nächsten Besuch der Seite ein neuer Cookie gesetzt, welcher meines Wissens den alten ersetzt, also die alten Session-Daten löscht. Du solltest also den Cookie löschen, bevor ein neuer Cookie gesetzt wird.

    Das ganze liegt an der Natur von Cookies im HTTP-Protokoll. Schaut man sich den HTTP-Response-Header an, sieht das ganze in etwa so aus:
    HTTP/1.0 200 OK
    Date: Tag, DD MM YYYY HH:mm:ss GMT
    Content-Type: text/html; charset=utf-8
    Cookie: PHPSESSID=123456789; CookieValue1=Foo; CookieValue2=Bar;
    
    $content
    Das PHPSESSID-Atribut speichert lediglich eine Zahl, nicht die Variablen, welche im Cookie gespeichert sind. Löscht du nun die Session-ID auf dem Server, führt die gesetzte Session-ID ins nichts. $_SESSION[value] ergibt afaik also immer false. ( Oder sonst was. Who knows? ) Du kannst also mit der Session-ID nichts mehr anfangen. Zudem wird die Session-ID beim nächsten session_start(); durch einen neuen Wert ersetzt.

    Für gewöhnlich werden Sessions nicht erst beim nächsten Login gesetzt. Sessions mit NULL-Values werden für gewöhnlich beim Besuchen der Seite gesetzt. ( Was es mehr oder weniger möglich macht, zu überprüfen, ob Cookies akzeptiert werden. ) Setzt du diese Session ''bevor'' du die Session löscht, wird die Session nach dem Löschen nicht neu gesetzt, also existiert sie im Browsercache weiter. Der Browser geht weiter davon aus, dass die Session-ID weiter besteht, da es im HTTP-Protokoll nicht vorgesehen ist, Attribute zu löschen

    Dein Code beim Logout müsste also lauten:
    session_destroy();
    session_start();
    Da es dem Server zuerst signalisiert: "Lösche den Session-Cookie, setze einen neuen Session-Cookie". So, wie du es hast, sagst du ihm: "Setze den Aktuellen Session-Cookie, Lösche den Aktuellen Session-Cookie.". Ein einfaches umkehren der Befehle sollte das Problem lösen, wenn ich mich nicht irre. ( ggf. auch vor dem
    session_destroy();
    noch ein
    session_start();
    . Auf jeden Fall musst du nach dem Zerstören einen neuen Cookie setzen. )
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!