#1 18. Juli 2010 Verständnisproblem Cookie und Login-Script Hey Leute Ich stehe gerade auf dem Schlauch was Cookies setzen in einem Login-Script angeht. setcookies() muss ja immer am Anfang einer Datei stehen, sonst bekommt man den Fehler, dass die Header-Infos nicht geändert werden können. Klar so weit. Jetzt habe ich ein Login-Script in php, sieht z.B. so aus. if user = ok AND if password = ok dann setcookies() Allerdings kann ich an dieser Stelle doch keine Cookies mehr setzen. Wie gehe ich hier weiter vor? Danke + Multi-Zitat Zitieren
#2 18. Juli 2010 AW: Verständnisproblem Cookie und Login-Script setcookies oder sessionstart muss nicht am Anfang einer Datei stehen, sondern vor der Ersten Ausgabe! Es dürfen keine Zeichen Ausgeben werden bevor diese Funktionen aufgerufen werden! Beispiel: HTML: <?PHP $test = 1; $test2 = 2; session_start(); setCookies('Code'); ?> <p>Hello world</p> + Multi-Zitat Zitieren
#3 18. Juli 2010 AW: Verständnisproblem Cookie und Login-Script Ah ok, dann werde ich mein Test Script mal ändern. Danke EDIT Hier mein Test-Script: Datei test.php: $_POST["test"] übergebe aus einem Formular. Datei test2.php: PHP: <? setcookie ( "test" , "" . $_POST [ "test" ]. "" , time ()+ 60 * 60 * 24 ); echo "Cookie OK. <br />Cookie lautet: " . $_COOKIE [ "test" ]. "" ; ?> Überhalb von dem PHP Code sind nur Sachen wie <head> oder <title> oder <html> Klappt nicht :/ Header Fehler. + Multi-Zitat Zitieren
#4 18. Juli 2010 AW: Verständnisproblem Cookie und Login-Script <head><body> etc. sind in dem Sinne auch eine Ausgabe... Eine Ausgabe ist ja nichtnur Text, den man sehen kann, sondern auch HTML-Code.. Würde dein Browser diesen nicht interpretieren, dann würde der Quelltext als Text in deiner Seite stehen! Falsch: PHP: <head><title>Test</title></head> <?phpsession_start (); ?> Falsch: PHP: <? php echo "test" ; session_start (); ?> Richtig PHP: <? phpsession_start (); ?> oder PHP: <? php$test = "das darf hier stehen, aber nicht ausgegeben werden!!" ; session_start (); ?> MfG + Multi-Zitat Zitieren
#5 18. Juli 2010 AW: Verständnisproblem Cookie und Login-Script Du darfst nur halt keine Elemente ausgeben oder sonstiges...wie es die Vorposter schon geschrieben haben.... Variabeln oder Anweisungen, wie zb if darfst du vorher definieren aber halt nichts über echo oder sonstiges ausgeben. Darf ich Fragen, was du mit "Allerdings kann ich an dieser Stelle doch keine Cookies mehr setzen. Wie gehe ich hier weiter vor?" genau meinst? Denn reintheoretisch könntest in einer if Anweisung setcookies() benutzen. + Multi-Zitat Zitieren
#6 18. Juli 2010 AW: Verständnisproblem Cookie und Login-Script im grunde muss man nur verstehen was eine ausgabe ist. bei einer anfrage an einen webserver gibt dieser immer zwei abschnitte zurück. abschnitt 1: die http-header gefolgt von zwei leerzeilen. abschnitt 2: der eigentliche inhalt. (siehe beispiel-antwort eines webservers) um so eine antwort zu erstellen muss der php-interpreter in zwei phasen arbeiten. phase 1: alle header in die antwort integrieren. phase 2: alle ausgaben (also inhalt) in die antwort integrieren. leider kann php das nicht durcheinander durchführen, da die header immer zuerst übertragen werden müssen. d.h. php ist von haus aus nicht in der lage "header" und "inhalt" gemischt aufzunehmen. also geht php, sobald eine ausgabe gemacht wurde (egal in welcher php-datei!), davon aus, dass nun keine weiteren header mehr kommen sollten (bzw. dürfen!). dieses verhalten kannst du aber manipulieren mit sog. observern (ob_start). diese funktionen schalten das sog. output-buffering ein und weisen php an alle ausgaben in einer "variablen" zu sammeln und erst auszugeben wenn das script a) beendet wurde oder b) du im script die anweisung dazu gibst. der nachteil von output-buffering ist, dass es den arbeitsspeicher des server belastet und die allg. performance sinkt. daher sollte dieses feature nur benutzt werden wenn es nicht anders geht. offtopic: header kannst du mit der funktion "header" selbst setzen, aber es kann auch sein das andere funktionen eigenständig header setzen (wie zb.: session_start, oder eben setcookie). * beispiel-antwort eines webservers: Code: Content-Type: text/html; Charset=UTF-8 name-des-headers: inhalt hallo: welt inhalt der webseite <strong>hallo</strong> + Multi-Zitat Zitieren
#7 19. Juli 2010 AW: Verständnisproblem Cookie und Login-Script Ich dachte, dass setcookies() vor allem stehen muss, also auch für eine If-Anweisung. Gut, vielen Dank. Ich werde das jetzt mal noch weiter testen und ggf. hier noch mal einen Post verfassen. + Multi-Zitat Zitieren
#8 19. Juli 2010 AW: Verständnisproblem Cookie und Login-Script Nein, dass haben wir doch versucht dir zu erklären! setcookies() und alles andere, was den Header manipuliert darf nicht hinter einer Ausgabe von Text oder HTML-Code kommen..Sprich alles was an echo oder ähnlichem kommt, ist eine Ausgabe.. Auch wenn es nur ein Leerzeichen ist! Siehe Murdocs Post.. + Multi-Zitat Zitieren