[PHP] Verständnisproblem Cookie und Login-Script

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Mirak, 18. Juli 2010 .

Schlagworte:
  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
     
  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>
     
  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.
     
  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>
    <?php
    session_start
    ();
    ?>
    Falsch:
    PHP:
    <? php
    echo  "test" ;
    session_start ();
    ?>
    Richtig
    PHP:
    <? php
    session_start
    ();
    ?>
    oder
    PHP:
    <? php
    $test
    = "das darf hier stehen, aber nicht ausgegeben werden!!" ;
    session_start ();
    ?>
    MfG
     
  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.
     
  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>
     
  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.
     
  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..
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.