cookie problem
bjb
- php
0 bjb0 Alex0 bjb
0 Sönke Tesch0 bjb0 bjb0 Sönke Tesch0 bjb0 bjb
hallo zusammen
ich hab ein problem mit einem cookie
er heißt 'login'
gesetzt habe ich ihn so:
setcookie("login",$name);
jetzt möchte ich ihn so löschen:
setcookie("login","",time()-3600);
geht aber nicht
muss ich dafür schon beim setzen ein zeit angeben?
will ich aber eigentlich nicht
kann mir jemand helfen??
gruß
bjb
ok
kleine korrektur mit dem IE gehts mit mozilla 1.4 nicht
kann mir trotzdem jemand helfen?? (wie es mit mozilla gehen könnte)
gruß
bjb
Hallo,
jetzt möchte ich ihn so löschen:
setcookie("login","",time()-3600);
...warum nicht einfach so?
setcookie("login","",time());
Grüße, Alex
...warum nicht einfach so?
weil ichs von php.net hab ;-)
setcookie("login","",time());
ok geht auch
mit mozilla gehts trotzdem nicht
jetzt möchte ich ihn so löschen:
setcookie("login","",time()-3600);geht aber nicht
Mach' Nägel mit Köpfen und setze die Zeit auf 0. Ich persönlich habe wegen der Zeitzonen und insbesondere der Sommerzeit immer ein Problem mit Zeitangaben. Nicht, daß es hier so sein muß, aber die Angabe "1 Stunde zurück" erscheint mir unter diesem Gesichtspunkt etwas wackelig ;) Eine 0 liegt auch in der Vergangenheit, aber dafür richtig: 1.1.1970 - das muß wirken.
Möglicherweise löscht Mozilla die Cookies auch erst etwas später, beim Verlassen einer Seite o.ä. Meiner ist zur Zeit gerade nicht griffbereit, kannst Du im Cookie-Manager nicht die Verfallszeit ablesen? Stimmt die mit jener vom IE überein (bei Zeitpunkten in der Zukunft)? Erst wenn Du da ein Verfallsdatum in der Vergangenheit entdeckst, hast Du einen Fehler in Mozilla gefunden.
Gruß,
soenk.e
kannst Du im Cookie-Manager nicht die Verfallszeit ablesen?
"Gültig bis: Am Ende der Sitzung"
das heißt mozilla ändert das Verfallsdatum nicht
gibts eine andere Möglichkeit Cookies zu löschen??
sollte allerdings mit php sein, ist nämlich für die Schule ;-)
ist wohl ein mozilla bug
mit mozilla firebird geht's nämlich
gruß
bjb
ist wohl ein mozilla bug
neue version runtergeladen
--> geht
gruß
bjb
kannst Du im Cookie-Manager nicht die Verfallszeit ablesen?
"Gültig bis: Am Ende der Sitzung"
das heißt mozilla ändert das Verfallsdatum nicht
Ich hab's jetzt mit Mozilla 1.3 probiert und es funktioniert einwandfrei, sowohl mit "0" als auch "time()-3600" als Verfallsdatum. Kann also ein Fehler in älteren Mozilla-Versionen sein.
gibts eine andere Möglichkeit Cookies zu löschen??
Du kannst es beim Löschen des Cookieinhalts belassen, denn darum geht's ja letztenendes: Keine Logindaten, kein Login. Beim Beenden des Browsers sollte der Cookie dann in jedem Fall verschwinden.
Wobei mir auffällt: Deine Loginverwaltung scheint schlecht aufgebaut zu sein (zumindest dem Beispiel nach). Sogar Anfänger können am entsprechenden Ort auf ihrem Rechner eine passende Zeile eintragen, mit der ein Cookie Login und einem beliebigen Nutzernamen erzeugt und gesendet wird.
Ein Logincookie sollte niemals ausschließlich Daten enthalten, die jeder kennt oder erraten kann. Benutze nach erfolgreicher Anmeldung etwas in folgender Art:
$cookie=Array("nutzer"=>$nutzer,"passwort"=>md5($passwort));
setcookie("login",serialize($cookie));
md5() erzeugt eine Prüfsumme aus dem Passwort, die zwar eindeutig, aber nicht reversibel (entschlüsselbar) ist.
serialize() macht aus einer beliebigen Variable einen Text, der sich später wieder in eine Variable zurückwandeln lässt; auf diese Art und Weise ersparst Du dem Benutzer gegenüber zwei setcookie()-Aufrufen (jeweils für "nutzer" und "passwort") einen Cookie und entsprechende, mehrfache Nachfragen vom Browser.
Auf den dann abgerufenen Seiten wirst Du jedesmal Name und Passwort erneut prüfen müssen, denn es reicht wie bereits angedeutet nicht, nur nach der Existenz von Daten zu fragen. Die Daten müssen auch plausibel sein!
if (isset($_COOKIE["login"]))
{
$cookie=unserialize($_COOKIE["login"])
$passwort=passwort_aus_nutzer_datenbank_abfragen($cookie["nutzer"]);
$logged_in=(md5($passwort)==$cookie["passwort"]);
}
else
{
$logged_in=false;
};
Beachte bitte auch den Teil, der $logged_in explizit auf false setzt. Niemals unintialisierte Variablen benutzen!
Zu guter Letzt: Mit dem in PHP eingebauten Sessionmanagment fährst Du einfacher, weil es statt den tatsächlichen Logindaten nur eine Sessionkennung an den Browser ausgibt, die nicht vorhersehbar ist (sein sollte). Damit kannst Du Dir dann auch die obige Passwortgeschichte sparen und Dich nur auf den Nutzernamen verlassen.
Gruß,
soenk.e
kannst Du im Cookie-Manager nicht die Verfallszeit ablesen?
"Gültig bis: Am Ende der Sitzung"
das heißt mozilla ändert das Verfallsdatum nichtIch hab's jetzt mit Mozilla 1.3 probiert und es funktioniert einwandfrei, sowohl mit "0" als auch "time()-3600" als Verfallsdatum. Kann also ein Fehler in älteren Mozilla-Versionen sein.
ist wohl ein fehler in der 1.4 alpha
1.4 beta geht
gruß
bjb
hallo sönke
ich habs jetzt mal so (ähnlich) probiert wie du es vorgeschlagen hast:
$name=$_POST['user'];
$password=$_POST['password'];
$logged_in=FAlSE;
if (!empty($name)&&!empty($password)){
echo $name;
if ($name=="testuser" &&$password=="testpw"){
$cookie=Array('USER'=>$name,'PASSWORD'=>md5($password));
setcookie('login',serialize($cookie));
echo '<h1>Hallo '.$name.'</h1>';
}
else{
die('<div class="err"> Passwort und/oder Username falsch</div>');
}
}
else{
if (isset($_COOKIE['login'])){
$cookie=unserialize($_COOKIE['login']);
$name=($cookie['USER']);
$logged_in=((md5('testpw')==$cookie['PASSWORD'])&&($name=='testuser'));
echo $name;
if ($logged_in==true){
echo '<h1>Hallo '.$name.'</h1>';}
else login();
}
else login();
}
geht leider nicht
siehst du den/die fehler??
danke schonmal
Gruß
bjb
ich habs jetzt mal so (ähnlich) probiert wie du es vorgeschlagen hast:
geht leider nicht
"Geht nicht gibt's nicht." Was passiert? Ist keine Anmeldung möglich? Wird kein Cookie gesetzt? Ist die Anmeldung nicht nutzbar? Sind die Cookiedaten falsch?
Im Prinzip sieht's richtig aus. Ich habe mir das Ganze nur kurz aus den Fingern gesaugt, kann sein, daß da noch irgendwo ein Denkfehler drinsteckt.
Lasse das Skript einfach mal mit mehreren var_dump()s durchlaufen und beobachte, welche Variablen andere Werte erhalten als erwartet.
Gruß,
soenk.e
$name=$_POST['user'];
$password=$_POST['password'];
$logged_in=FAlSE;
if (!empty($name)&&!empty($password)){
echo $name;
if ($name=="testuser" &&$password=="testpw"){
$cookie=Array('USER'=>$name,'PASSWORD'=>md5($password));
setcookie('login',serialize($cookie));
echo '<h1>Hallo '.$name.'</h1>';
}
else{
die('<div class="err"> Passwort und/oder Username falsch</div>');
}
}
der teil hier drüber geht
else{
if (isset($_COOKIE['login'])){
$cookie=unserialize($_COOKIE['login']);
$name=($cookie['USER']);
$logged_in=((md5('testpw')==$cookie['PASSWORD'])&&($name=='testuser'));
echo(var_dump($logged_in)) ====>false sollte aber true sein
if ($logged_in==true){
echo '<h1>Hallo '.$name.'</h1>';}
else login();
}
else login();
}
so nochmal:
else{
if (isset($_COOKIE['login'])){
$cookie=unserialize($_COOKIE['login']);
echo var_dump($_COOKIE['login']); ==> stimmt
echo var_dump($cookie); ==>bool(false) hääää? was soll das?
$name=($cookie['USER']);
echo var_dump($name) ==>'NULL'
$logged_in=((md5('testpw')==$cookie['PASSWORD'])&&($name=='testuser'));
echo(var_dump($logged_in)); ====>false sollte aber true sein
if ($logged_in==true){
echo '<h1>Hallo '.$name.'</h1>';}
else login();
}
else login();
}
das problem ist wohl das unserialize
oder?
allerdings versteh ich das nicht
hast du ne idee??
danke
gruß
bjb