1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Cookies und Cookiedaten

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von TheRealDarklord, 17.02.06.

  1. Ich habe wieder mal ein kleines aber feines Problem.

    folgende Situation:
    Ich habe eine nette Portalseite, auf der man sich einloggen kann.
    Um bei öfteren Besuchen der Seite dieses ständige Eintippen zu vermeiden, habe ich mir ein AutoLogIn auf Cookie-Basis (nicht Sessions) gemacht.
    Ist die AutoLogIn-Funktion aktiviert, wird ein Cookie mit
    Code:
     
    setcookie("cook[name]",$name,time()+60*60*24*7);
    setcookie("cook[pass]",$pass,time()+60*60*24*7);
    
    gesetzt.
    Auf der Portalseite werden diese beiden Daten mit $_COOKIE[cook][name]n und $_COOKIE[cook][pass] abgefragt und bei passender Übereinstimmung dieses Paares mit einem Paar in der DB, wird das LogIn-Script ausgeführt.

    Klappt alles wunderbar.
    Wenn ich ohne LogOut das Browserfenster schließe und die Seite wieder besuche, dann wird automatisch eingeloggt. Wie gewünscht.
    Das Problem:
    Wenn ich auf LogOut gehe, dann wird session_destroy() ausgeführt.
    Und wenn ich danach wieder die Portalseite aufsuche, dann wird nicht mehr automatisch eingeloggt.
    Und wenn ich mir die Daten des Cookies ausgeben lasse (mit print_r($_COOKIE)), dann hat das Cookie auch nicht die Werte, die per setcookie gesetzt wurden.

    Meine Vermutung ist daher nun, dass session_destroy auch Cookies, die mittels setcookie(); gesetzt wurden entfernt.
    aber wie kann ich das vermeiden?
    Weil das ist ja so von mir nicht gewünscht.
     
  2. AmishBit

    AmishBit Gast

    Wenn man automatisch eingeloggt werden soll, wozu kann man sich dann ausloggen?
     
  3. Naja, um die Portalseite dennoch sehen zu können.
    Weil dort eventuell Neuigkeiten zu sehen sind.
     
  4. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    Wenn man sich nicht zu Hause anmeldet sondern z.B. in einem Internetcafe oder auf der Arbeit.

    Zu deinem Problem. Ich kann dir versichern dass session_destroy() keine Cookies löscht. Um einen Cookie zu löschen musst du ihn entweder leeren oder mit unset() zurücksetzen. Ich vermute dass dein Auto-Login irgendwie auf Sessions zurückgreift und daher nicht mehr funktionieren kann.

    Zeig doch mal deinen Logout-Code
     
  5. session_unset();
    session_destroy();
    header(...); --> Weiterleitung zum index

    mehr ist da nicht
    und kaum hab ich LogOut gedrückt, dann stehen mir die Cookiedaten nicht mehr zur Verfügung
     
  6. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    Arbeitest du Lokal oder aufm Webserver? Also Lokal mit XAMPP oder MAMP?

    Setz die Cookies mal so und schau dann ob es funktioniert:

    oder überprüfe mit ner if-Abfrage ob setcookie(); true zurückgibt.
     
    #6 duderino, 19.02.06
    Zuletzt bearbeitet: 19.02.06
  7. Nogger

    Nogger Damasonrenette

    Dabei seit:
    05.11.05
    Beiträge:
    494
    Wie wäre es, wenn du im Browser einfach einstellst, daß jedes Cookie bestätigt werden muß. Dann siehst du auch den Wert und weißt, wann es denn gelöscht wird.
     
  8. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    Also ich vermute eher dass diese komischen Namen (cook[pass]) dem Cookie zu schaffen machen. Warscheinlich kann kein Cookie gesetzt werden und darum werden die Cookie Daten in ner Session zwischengespeichert.
     
  9. Wenn ich mit dem FireFox öffne und mit dem CookieEdit-PlugIn mir die Cookies anzeigen lasse, dann sind beide Cookies vorhanden.

    Und auch unter der setcookie() - Beschreibung im PHP Manual steht:
    Es ist mir einfach schleierhaft.
     
  10. Nogger

    Nogger Damasonrenette

    Dabei seit:
    05.11.05
    Beiträge:
    494
    Und wenn du auf der Seite $_COOKIE ausgeben läßt sind sie auch da und haben die richtigen Werte? Wenn nein: Werden sie auch mitgeschickt? Was sagt die "Live HTTP headers" Erweiterung vom Firefox?
     
  11. Die Cookies sind auf der Seite vorhanden (und werden auch mitgesendet) sofern ich nicht mein Ausloggen-Script aufrufe.
    Davor sind sie da und ich kann sie mit $_COOKIE[...] ansprechen und nutzen.
    Aber halt danach nicht mehr.
    Ohne das an den Cookies an sich was geändert wurde.
     
  12. Nogger

    Nogger Damasonrenette

    Dabei seit:
    05.11.05
    Beiträge:
    494
    Willst du damit sagen, das bei dem Ausloggen dein Browser kein "Löschcookie" empfängt, das Cookie weiter im Browser gesetzt ist, es beim nächsten Seitenaufruf gemäß "live http header" mitgeschickt wird, aber print_r($_COOKIE) trotzdem nichts anzeigt?

    Das glaube ich nicht.
     
  13. Meinst du mit "Löschcookie" ein Cookie mit demselben Namen aber einem leeren bzw. "false" Inhalt?
    Wenn ja: das sende ich nicht mit. Eben weil das Cookie ja gesetzt bleiben soll.

    Wenn nein: was ist das?

    Ok, da ich mich wohl ungenau ausformuliert habe:
    Es kann mittels print_r($_COOKIE) der Inhalt des Cookies nicht angezeigt werden, da es überhaupt nicht mehr existiert.
    Es hat nicht nicht einen anderen Wert, sondern ist nicht mehr vorhanden.
    Soll heißen, es kann danach auch per "live http header" kein Cookie mehr geschickt werden.
    Es ist aus der Cookie-Liste des FireFox verschwunden.

    Und genau dieses Verschwinden finde ich mysteriös. Vor allem ist es ungewollt.
     
  14. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    hmm, jetzt fällt mir auch nichts mehr ein wie man dir helfen könnte. Es hilft wohl nurnoch das Script nochmal genau durchzugehen oder den Fehler mal in einem speziellen php Forum zu posten. Versuchs doch mal bei www.php.de
     
  15. Nogger

    Nogger Damasonrenette

    Dabei seit:
    05.11.05
    Beiträge:
    494
    So ein Cookie meine ich. Bezieht sich das "das sende ich nicht mit" auf das, was du glaubst was aufgrund deiner Programmierung passiert, oder darauf, was real geschickt wird. Heißt: wenn du das Bestätigen von Cookies im Browser aktivierst, dann bekommst du bei der Abmeldung keinen Hinweis auf das Setzen/Löschen eines Cookies, bzw. in dem Log von live http header steht in der Antwort kein Cookie?

    Wenn ja: Gib mal eine URL und einen Benutzernamen/Paßwort, wo man das sehen kann.
     
  16. wurgs, ich Schlumpf, ich

    habe eben was entdeckt:
    Der Fehler lag nicht beim LogOut, sondern beim Auto-LogIn.
    Dabei wird der aktuelle Cookie nämlich erneuert (Laufzeit verlängert).
    Die Werte für $name und $pass kommen dabei aus $_POST-Variablen.
    Klar das die beim erstmaligen Aufruf der Seite nicht existieren.

    Daher loggt der sich einmal ein mit den Daten, löscht die dann und es geht danach nimmer.
    Und das print_r() hab ich immer erst anzeigen lassen, nachdem das Cookie aktualisiert wurde (da ich ja davon ausging, dass da nicht der Fehler liegt).
    Daher kein Ergebnis dort.
    Und auch live http header konnte nix anzeigen, da das Cookie dann schon weg war.

    Naja, nun zeigt er mir aber mein wunderfeines Cookie an und es geht einwandfrei. :D
     
  17. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    Arg, solche Fehler sind echt ärgerlich. Da sucht man Tage nach nem dummen Fehler an der falschen Stelle...
     
  18. möchte mich noch herzlich für die tipps und Hilfestellungen bedanken
    z.B. hatte ich zwar das live http header PlugIn drinn, aber bisher nicht einmal genutzt :D
     

Diese Seite empfehlen