[PHP] Cookie setzen nach Login für autom. Login?
-
Okay also das sieht jetzt folgender Maßen aus:
// index.php: include_once("./user.php"); // Hier ist die Userverwaltung drin ob_start(); session_start(); if(!is_object($curUser) && !isset($_COOKIES['SchoenerName'])) { $curUser =& new user; $_SESSION['curUser'] = $curUser; } else if(!is_object($curUser) && isset($_COOKIES['SchoenerName'])) { $curUser =& new User; $_SESSION['curUser'] = $curUser; $curUser->loginbyid($_COOKIES['SchoenerName']); } // Ausgaben und dann ob_end_flush() - wär aber auch implizit // inhalt.php - if-Bedingung page=login erfüllt: if($curUser->login($_POST['nickname'],$_POST['passwort'])) { setcookie("SchoenerName","$curUser->user_id"); ?> <h1>Erfolgreich eingeloggt</h1> Klicke hier um zu deiner persönlichen Startseite zu gelangen: <a href="./index.php?page=<?php echo $curUser->user_startseite ?>" target="_self">Persönliche Startseite</a>.<br /> <br /> <br /> <?php } else // Ausgabe wenn falscher Benu oder Pass
Funktioniert aber leider trozdem nicht :(. Der richtige Text wird zwar ausgeben und der User ist auch eingeloggt (hab ich überprüft) aber wenn ich den Browser schließe und dann wieder dir Page besuche bin ich ausgeloggt :(.
Cookies habe ich eingeschaltet!
Kann das eventl. irgendwas mit der Lebensdauer zu tun haben?
MfG SideWinder
-
Ja, du musst bei setcookie im 3. Parameter (expire) angeben, wie lange das Cookie leben soll.
PHP-Doku schrieb:
Ist der Parameter nicht gesetzt, verfällt das Cookie am Ende der Session (wenn der Browser geschlossen wird).
-
flenders schrieb:
Ja, du musst bei setcookie im 3. Parameter (expire) angeben, wie lange das Cookie leben soll.
PHP-Doku schrieb:
Ist der Parameter nicht gesetzt, verfällt das Cookie am Ende der Session (wenn der Browser geschlossen wird).
Okay Param3 ist jetzt auf time()+60*60*24*10 - 10 Tage. Doch es klappt immer noch nicht.
Deswegen habe ich nun auch Param4 gesetzt: auf "/" - hat aber auch nichts gebracht.
Das Cookie wird nicht einmal gesetzt. Gebe ich den Wert direkt danach mit $_COOKIES['SchoenerName'] aus wird nichts ausgegeben.
Im Opera ist das Cookie allerdings zu finden. Bloß entweder ist die Übertragung falsch oder es wird nicht in $_COOKIES gespeichert.
MfG SideWinder
-
Kannst du denn, wenn du den Browser nicht schließt auf der Folge-Seite auf das Cookie zugreifen?
Falls nicht: kommst du in der Scriptausführung überhaupt zu setcookie und liefert die Funktion dann auch Erfolg zurück?Da du auch $_SESSION verwendest nehme ich an, dass bei dir PHP >= 4.1.0 läuft
-
flenders schrieb:
Kannst du denn, wenn du den Browser nicht schließt auf der Folge-Seite auf das Cookie zugreifen?
Falls nicht: kommst du in der Scriptausführung überhaupt zu setcookie und liefert die Funktion dann auch Erfolg zurück?Da du auch $_SESSION verwendest nehme ich an, dass bei dir PHP >= 4.1.0 läuft
Ja in der Scriptausführung komme ich zu setcookie() da der richtige Text ausgegeben wird der in derselben if-Anweisung steckt
Es läuft PHP 4.1.2.
Ich werde nun probieren auf Folgeseiten darauf zuzugreifen ... mal sehen.
MfG SideWinder
-
Nein ich kann auch auf Folgeseiten nicht auf das Cookie zugreifen. Der Opera hat das Cookie allerdings gespeichert!
MfG SideWinder
-
Das Array heißt schon mal COOKIE und nicht COOKIES - bloß wars das auch nicht
MfG SideWinder
-
SideWinder schrieb:
Das Array heißt schon mal COOKIE und nicht COOKIES - bloß wars das auch nicht
MfG SideWinder
hast du deine cookies auch aktiviert im browser ?
-
Jup, steht schon weiter oben.
Mache ich einen Schritt vor dem Abfragen folgendes:
print_r($_COOKIE);
ist das Cookie mit den richtigen Werten vorhanden. Aber isset($_COOKIE['SchoenerName']) ergibt immer false (siehe Anweisung oben).
MfG SideWinder
-
Problem liegt offenbar in der loginbyid-Funktion, jetzt funktioniert der Rest. Danke vorerst - der Fehler in der loginbyid-Funktion sollte sich schnell finden lassen.
BTW: Welches Kennzeichen würdet ihr im Cookie speichern, damit ich den User wiedererkenne? User-ID? Die kann er ja dann nach belieben anpassen?!
MfG SideWinder
-
verschlüssel doch die user-id mit md5 oder ähnlichem...
-
Tobsen schrieb:
verschlüssel doch die user-id mit md5 oder ähnlichem...
die userid zu verschlüsseln macht nur sinn wenn es keine fortlaufende zahl ist die eh nur 1 oder 2 stellig ist ich würd userid und md5(session_id) speichern ... ist dann unsicher aber so machens viele systeme afaik
-
1ntrud0r schrieb:
Tobsen schrieb:
verschlüssel doch die user-id mit md5 oder ähnlichem...
die userid zu verschlüsseln macht nur sinn wenn es keine fortlaufende zahl ist die eh nur 1 oder 2 stellig ist ich würd userid und md5(session_id) speichern ... ist dann unsicher aber so machens viele systeme afaik
Session ID? Die ist das nächste Mal ja gar nicht mehr gültig?!
MfG SideWinder
-
hmm du speicherst dir die session doch in einer mysqldb oder ??
-
1ntrud0r schrieb:
hmm du speicherst dir die session doch in einer mysqldb oder ??
Nope ich speichere bloß Userdaten. Das ich jedesmal die Session-ID mitspeichere ist imho sehr aufwendig - aber wenns anders nicht sicher ist.
MfG SideWinder
-
Wie sieht denn bei dir eine User-ID aus? ist das ein md5?
-
user id als md5 ist schwachsinn .. aber vielleicht so blöd das keiner drauf kommt
-
kommt darauf an, wie er seine User-ID verwendet :p
-
Und wenn ich jedem einfach eine 255-stellige Unique-Zahl kreiere die ich im Cookie speichere? Über die ist er a) eindeutig identifizierbar b) sie ist sicher, da er egal was er einsetzt in 99,9999% der Fälle keinen anderen User erwischt sondern eine ungültige ID c) wie gesagt, ein Bruteforce dauert zu lange.
Und wichtige Daten speichere ich ja nicht, wer einen User hackt hat keine wesentlichen Vorteile.
Ist das halbwegs sicher?
MfG SideWinder
-
Das meinte ich ja! Wenn jeder User z.B. eine 32-stelligen md5-ID hat, die eigentlich nur deine DB kennt / kennen muss, sehe ich keine großen Probleme darin, die beim User zu speichern.
Also so in der Art: User loggt sich ein - du liest die ID aus der DB und speicherst sie in einem Cookie. Kommt der User später wieder erkennst du ihn gleich anhand seiner User-ID.Etwas problematischer wird es nur, falls der User eine öffentlichen Zugang benutzt und vergisst sich auszuloggen bzw. du ihm gar nicht die Möglichkeit dazu gibst.