+ Antworten
Ergebnis 1 bis 13 von 13

Thema: cookies löschen - bin ich zu doof?!

  1. #1
    Erfahrener Benutzer
    Registriert seit
    27.09.2006
    Ort
    Radebeul
    Beiträge
    455

    Standard cookies löschen - bin ich zu doof?!

    Hallo,
    ich zweifel gerade an mir selbst... Ich habe ein ogin script, welches auf wunsch Cookies setzt damit man sich später nicht nochmal einloggen muss.

    Bei meinem Logout script lösche ich die Cookies und zerstöre die Session.
    Aber irgendwie werden meine Cookies nicht gelöscht
    Folgender Code:
    PHP-Code:
        public function logout()
        {
            
    setcookie('login');
            
    setcookie('loginname');
            
    setcookie('loginid');
            
    session_destroy();
            
        } 
    eimal so und ich habe es schon mit
    PHP-Code:
        public function logout()
        {
            
    setcookie('login');
            
    setcookie('loginname'''time()-100);
            
    setcookie('loginid'''time()-100);
            
    session_destroy();
            
        } 
    Was mach ich denn Falsch?
    Achja, man wird nach dem Logout automatisch weitergeleitet (dokument wird verlassen) und der Pfad der Cookies ist "/".
    Geändert von kampfgnom (28.08.2007 um 12:53 Uhr)

  2. #2
    Erfahrener Benutzer
    Registriert seit
    27.09.2006
    Ort
    Radebeul
    Beiträge
    455

    Standard

    keiner ne Ahnung woran das liegt?

    //Edit: Gut es geht, es lag daran, das ich in der Login klasse wo die login cookies gesetzt werden sollten, da wurden die cookies nicht gesetzt (durch ne falsche if abfrage) und wenn man sich ausloggte dann wurde natürlich wieder ein cookie gesetzt.
    Geändert von kampfgnom (28.08.2007 um 14:20 Uhr)

  3. #3
    Erfahrener Benutzer
    Registriert seit
    04.01.2006
    Beiträge
    964

    Standard

    session_destroy() leert werder $_SESSION noch löscht es den Sitzungs-Keks. Das musst du selbst erledigen. Ein Beispiel findest du im Handbuch:

    http://www.php.net/manual/en/functio...on-destroy.php

    Am besten kapselst du das natürlich gleich in einem Session-Objekt.

    Basti

  4. #4
    Erfahrener Benutzer
    Registriert seit
    27.09.2006
    Ort
    Radebeul
    Beiträge
    455

    Standard

    Naja ich machs immer so, das beim Logout meine Selbstgesetzen Cookies gelöscht werden, die Session mit session_destroy() zertsört wird und leite danach wieder auf die Hauptseite um.
    Wenn man sich danach wieder einloggen will, ist das SESSION array dann lehr.

  5. #5
    Erfahrener Benutzer
    Registriert seit
    04.01.2006
    Beiträge
    964

    Standard

    Das ist sehr fehleranfällig, denn diese "Regel", sofort nach dem Log-Out auch den Redirect zu machen musst du im Kopf haben. Es gibt keinen Code, mit dem das auch für die Zukunft gewährleistet werden könnte. Eventuell kommen irgendwann mal Funktionen dazu, die du vor jedem Skript-Ende oder Redirect durchführen möchtest (session_write_close() gehört übrigens immer vor einen Redirect, spielt hier aber ja keine Rolle) und da hast du leicht aus dem Blick verloren, dass die Daten in $_SESSION nicht mehr gültig sind. Macht ja auch keinen Sinn, veraltete/ungültige Daten im Speicher aufzubewahren. Daher besser gleich löschen, Session-Cookie löschen und Session-ID ändern (session_regenerate_id(true)).

    Letzteres ist grundsätzlich bei jedem Start einer Session, sowie bei jedem Status-Wechsel (Log-In, Log-Out) angebracht (Stichwort: Session-Fixation).

    Basti

  6. #6
    Erfahrener Benutzer
    Registriert seit
    27.09.2006
    Ort
    Radebeul
    Beiträge
    455

    Standard

    Heißt sozusagen, ich soll das komplette SESSION Array mit unset löschen und das SESSION COOKIE auch? und danach erst redirecten?

  7. #7
    Erfahrener Benutzer
    Registriert seit
    04.01.2006
    Beiträge
    964

    Standard

    PHP-Code:
    <?php

    // log out

    // Session muss natuerlich laufen
    session_start();

    // Session-Daten loeschen
    $_SESSION = array();


    // wenn die Session wirklich beendet werden soll:

    if (isset($_COOKIE[session_name()]))
        
    setcookie(session_name(), ''time() - 42000'/');

    session_destroy();
    header('Location: ' $sAbsoluteUri);


    // oder, wenn die Session weiter laufen soll und PHP >= 5.1:

    session_regenerate_id(true);
    session_write_close();

    if (
    SID !== '')
        
    SID strpos($sAbsoluteUri'?') === false '?' SID '&' SID;

    header('Location: ' $sAbsoluteUri SID);
    Basti
    Geändert von Basti (30.08.2007 um 10:20 Uhr)

  8. #8
    Erfahrener Benutzer
    Registriert seit
    27.09.2006
    Ort
    Radebeul
    Beiträge
    455

    Standard

    Danke, das wusste ich gar nicht. Jedes Buch oder Tutorial was ich bisher gelesen habe macht es immer nur mit session_destroy();

    Aber das werde ich gleich einbauen!
    Danke!

    grüße
    Gabriel

  9. #9
    Erfahrener Benutzer
    Registriert seit
    04.01.2006
    Beiträge
    964

    Standard

    Für PHP < 5.1 musst du die Daten halt noch explizit löschen, aber sieht ja nach einer Neuentwicklung aus und die wird ja sicher auf 5.2 laufen.

    Basti

  10. #10
    Projektleiter Avatar von Jann Hendrik
    Registriert seit
    02.12.2004
    Ort
    Wildeshausen
    Beiträge
    3.298
    Blog-Einträge
    32

    Standard

    @Basti: danke!

  11. #11
    Erfahrener Benutzer
    Registriert seit
    04.01.2006
    Beiträge
    964

    Standard

    Hab oben noch die Session-ID angeklebt, falls kein Cookie gesetzt werden konnte. Hoffe das stimmt so in etwa.

    Ich hab in meiner Session-Klasse noch ein @ vor session_destroy(), kann aber gerade nicht finden, wo ich mir das abgeguckt habe. Womöglich gibt es einen Fehler, wenn zwischen dem session_start() und dem session_destroy() ein anderer Prozess die Session-Datei löscht? Der Garbage Collector schaut sich ja die mtime der Dateien an und springt ja auch nicht bei jedem Request an. Auch kann es ja unterschiedliche Werte der Lebensdauer auf ein Verzeichnis geben.

    Daher nochmal ein paar Tipps zum Umgang mit Sessions zusammengefasst:

    - Verzeichnis immer explizit je Anwendung angeben. Das verhindert sowohl, dass andere Skripte die Session-Dateien bei einer dort geringer eingestellten Lebensdauer vorzeitig löschen und schützt die Dateien in einer Shared-Host-Umgebung natürlich vor dem Zugriff der anderen Kunden auf dem Server, der bei einem gemeinsamen /tmp-Verzeichnis durchaus möglich sein kann.

    - Startzeit immer selbst speichern und Session ggf. selbst beenden/neu starten, wenn abgelaufen.

    - Beim ersten Start der Session Session-ID wechseln.

    - Bei jedem Statuswechsel Session-ID wechseln.

    - Selbst bei session.trans-sid bei einem Redirect die Session-ID ggf. selbst anhängen, da absolute URIs ja nicht umgeschrieben werden (und Werte im Location-Header womöglich eh nicht, aber das weiß ich nicht auswendig).

    - register_globals immer ausschalten, denn sonst überschreiben Variablen im globalen Namensraum automatisch Session-Variablen, wenn eine derart benannte Session-Variable existiert!

    - session_regenerate_id() löscht nur die alten Session-Daten (z.B. Datei), wenn der erste Parameter auf true steht (ab 5.1), andernfalls selbst löschen!

    - Das Speichern und Kontrollieren einer maximalen Gesamtlaufzeit einer Session kann zusätzliche Sicherheit bieten.

    - Beim Kapseln der Session in einer Klasse dürfen die Daten natürlich nicht in $_SESSION gespeichert werden bzw. eben erst beim Speichern der Session, da sonst die Kapselung ja für den Arsch ist.

    - Session-Dateien werden von dem Skript gesperrt, so dass ein explizites session_write_close(); bei Framesets, Weiterleitungen etc. Verzögerungen ersparen kann.

    - Ein $_SESSION = $aArray; scheint Probleme zu machen. Es wird ein foreach($aArray as $sKey => $mValue) $_SESSION[$sKey] = $mValue; empfohlen.

    Hoffe, das hilft dem einen oder anderen weiter. …wird wohl mal Zeit für ein kleines Tutorial.

    Basti

  12. #12
    Erfahrener Benutzer
    Registriert seit
    27.09.2006
    Ort
    Radebeul
    Beiträge
    455

    Standard

    Danke Bast! Das sind ja ganz neue Welten, so hab ich mich damit noch gar nicht auseinandergesetzt! Vielen Dank!

  13. #13
    Projektleiter Avatar von Jann Hendrik
    Registriert seit
    02.12.2004
    Ort
    Wildeshausen
    Beiträge
    3.298
    Blog-Einträge
    32

    Standard

    Zitat Zitat von Basti Beitrag anzeigen
    …wird wohl mal Zeit für ein kleines Tutorial.
    Immer gerne gesehen!!!

+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. Now Playing!
    Von Lars im Forum Plauderecke
    Antworten: 2411
    Letzter Beitrag: 27.08.2009, 07:43
  2. [Thunderbird] eMails werden nur zum löschen markiert
    Von MrNiceGuy im Forum Plauderecke
    Antworten: 5
    Letzter Beitrag: 13.09.2007, 18:56
  3. Prob. beim Ordner löschen
    Von X-Unity.de im Forum PHP-Programmierung
    Antworten: 15
    Letzter Beitrag: 19.03.2006, 11:27
  4. Cookies - Was haltet ihr davon?
    Von MrNiceGuy im Forum Plauderecke
    Antworten: 17
    Letzter Beitrag: 01.12.2005, 09:47
  5. IE + Cookies
    Von Chr!s im Forum PHP-Programmierung
    Antworten: 9
    Letzter Beitrag: 07.09.2005, 18:51

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein

Impressum · Tutorials · Nutzungsbedingungen · thematisch sortierte Linklisten · Spendenaufruf · Team · Partnerprojekte

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48