• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> Klick

Cookies und Cookiedaten

  • Ersteller TheRealDarklord
  • Erstellt am

TheRealDarklord

Gast
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.
 

AmishBit

Gast
Wenn man automatisch eingeloggt werden soll, wozu kann man sich dann ausloggen?
 

TheRealDarklord

Gast
Naja, um die Portalseite dennoch sehen zu können.
Weil dort eventuell Neuigkeiten zu sehen sind.
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
AmishBit schrieb:
Wenn man automatisch eingeloggt werden soll, wozu kann man sich dann ausloggen?

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
 

TheRealDarklord

Gast
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
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Arbeitest du Lokal oder aufm Webserver? Also Lokal mit XAMPP oder MAMP?

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

setcookie("name", $name, time()+60*60*24*7);
setcookie("passwort", $pass, time()+60*60*24*7);

oder überprüfe mit ner if-Abfrage ob setcookie(); true zurückgibt.
 
Zuletzt bearbeitet:

Nogger

Damasonrenette
Registriert
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.
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
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.
 

TheRealDarklord

Gast
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:
Namen von Cookies können auch als Arraynamen gesetzt werden und stehen dann in Ihren Skripten als Arrays zu Verfügung, während sie auf dem System des Benutzers als separate Cookies abgespeichert werden.
[...]
Beispiel 3. setcookie() und Arrays
<?php
// Setzen der Cookies
setcookie ("cookie[three]", "cookiethree"
);
setcookie ("cookie[two]", "cookietwo"
);
setcookie ("cookie[one]", "cookieone"
);

// Nach dem Neuladen der Seite wieder ausgeben
if (isset($_COOKIE['cookie'
])) {
foreach (
$_COOKIE['cookie'] as $name => $value
) {
echo
"$name : $value <br />\n"
;
}
}
?>

Es ist mir einfach schleierhaft.
 

Nogger

Damasonrenette
Registriert
05.11.05
Beiträge
494
TheRealDarklord schrieb:
Wenn ich mit dem FireFox öffne und mit dem CookieEdit-PlugIn mir die Cookies anzeigen lasse, dann sind beide Cookies vorhanden.

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?
 

TheRealDarklord

Gast
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.
 

Nogger

Damasonrenette
Registriert
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.
 

TheRealDarklord

Gast
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.
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
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
 

Nogger

Damasonrenette
Registriert
05.11.05
Beiträge
494
TheRealDarklord schrieb:
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.

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.
 

TheRealDarklord

Gast
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
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Arg, solche Fehler sind echt ärgerlich. Da sucht man Tage nach nem dummen Fehler an der falschen Stelle...
 

TheRealDarklord

Gast
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