[PHP] Cookie setzen nach Login für autom. Login?
-
Ich möchte gerne via PHP ein Cookie setzen sobald sich der User eingeloggt hat damit er beim nächsten Mal automatisch eingeloggt wird. Doch leider funktioniert das nicht :(.
Sobald er sich eingeloggt hat sind bei mir die Headers schon gesendet worden. Also muss ich mit dem Setzen von Cookies bis zum nächsten Aufruf irgendeiner Seite warten. In der index.php steht also am Anfang:
if(isset($_SESSION['setacookie'])) { setcookie("SchoenerName","curUser->user_id"); $_SESSION['setacookie'] = 0; }
Doch beim nächsten Aufruf der Page will ich das Cookie über $_COOKIES["SchoenerName"] wieder abrufen -> nichts da.
Wieso funktioniert das nicht?
MfG SideWinder
-
Wieso sind die header schon gesendet? du kannst doch gleich zu Beginn des Scripts die Daten überprüfen und anschließend das Cookie setzen
-
flenders schrieb:
Wieso sind die header schon gesendet? du kannst doch gleich zu Beginn des Scripts die Daten überprüfen und anschließend das Cookie setzen
Wie denn? Der Login an sich passiert in der inhalt.php in einem Formular. Das leitet weiter an index.php?page=login was imho wieder in der inhalt.php unter "login" prüft ob alles okay ist. Wenn die inhalt.php aber eingebunden wird, sind die Header durch die index.php schon längst gesendet.
MfG SideWinder
-
Sowas macht man im Normalfall deswegen ganz zu Beginn in der Scriptausführung
Du könntes aber über aktivieren von Output-Buffering erreichen, dass du an beliebiger Stelle header senden kannst
-
flenders schrieb:
Sowas macht man im Normalfall deswegen ganz zu Beginn in der Scriptausführung
Du könntes aber über aktivieren von Output-Buffering erreichen, dass du an beliebiger Stelle header senden kannstAuf welchen Wert muss ich output_buffering stellen? 1 oder On?
MfG SideWinder
-
Einfach am Anfang ob_start(); und am Ende dann ob_end_flush(); aufrufen
-
Bringt mir OB nur etwas wenn ich den gesamten HTML-Code per echo ausgebe oder auch wenn ich ?>HTML-Code<?php habe?
MfG SideWinder
-
Hilft dir auch dann, wenn du HTML Code außerhalb von PHP Blöcken ausgibst.
-
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