Sabine: Login Cookie schreiben und Cookie auslesen - Array Problem

Hallo,

ich bastel hier seit Stunden ein einem einfachen Script herum woran ich schon langsam verzweifel, weil ich einfach nur noch Bahnhof verstehe...

Ich möchte Username und Passwort in im Cookie speichern später mein cookie wieder auslesen aber das geht bei mir nicht!?

Das Cookie wird im Array gespeichert aber warum erhalte ich keine Ausgabe wenn ich das Array $cookie_user auslese und einfach nur den User und das Passowort davon als Ausgabe sehen will...

Mein Script:

if (isset($_REQUEST['checkbox_cookie'])):
   $cookie_user = $_REQUEST['username'];
   $cookie_pass = $_REQUEST['passwort'];
   @setcookie($cookie_user,$cookie_pass,time()+(3600*24));

foreach ($_COOKIE['$cookie_user'] as $name => $value) {
          echo "$name : $value <br />\n";
      }

endif;

Was ist hier falsch bzw wie muss es richtig heissen?

Vielen lieben Dank für Eure Hilfe!

Sabine

  1. Hi,

    Ich möchte Username und Passwort in im Cookie speichern

    ein Cookie wird auf Clientseite gespeichert. Hatte der Client bereits Gelegenheit dazu?

    später mein cookie wieder auslesen

    Wie viel später? Genauer gefragt: Wie viele Requests später?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. ein Cookie wird auf Clientseite gespeichert. Hatte der Client bereits Gelegenheit dazu?

      Das ist doch logisch, sonst bräuchte ich mit cookies nicht arbeiten!
      Ich brauche eine Cookie Lösung, nichts anderes um weitere Fragen hiermit geklärt zu haben.

      später mein cookie wieder auslesen

      Wie viel später? Genauer gefragt: Wie viele Requests später?

      Steht im Script! Echo.... Ausgabe...

      1. Huhu

        ein Cookie wird auf Clientseite gespeichert. Hatte der Client bereits Gelegenheit dazu?

        Das ist doch logisch, sonst bräuchte ich mit cookies nicht arbeiten!

        Naja, üblicherweise wird eine Frage wie Deine von Leuten gestellt welche die
        Funktionsweise von Cookies noch nicht vollständig verstanden haben.

        Ich brauche eine Cookie Lösung, nichts anderes um weitere Fragen hiermit geklärt zu haben.

        Ich frage mich allerdings warum Du hier ...

        @setcookie($cookie_user,$cookie_pass,time()+(3600*24));

        ... potentielle Fehlermeldungen unterdrückst.
        Z.B. "header already sent", immer wieder gerne genommen ;-)

        foreach ($_COOKIE['$cookie_user'] as $name => $value) {

        ... und hier davon ausgehst das $_COOKIE['$cookie_user'] ein Array ist?

        Wie viel später? Genauer gefragt: Wie viele Requests später?
        Steht im Script! Echo.... Ausgabe...

        Dir ist klar, das zwischen Setzen und Auslesen eines Cookie ein weiterer Request statt finden muss?
        Das ist logisch, gell?

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. foreach ($_COOKIE['$cookie_user'] as $name => $value) {
          ... und hier davon ausgehst das $_COOKIE['$cookie_user'] ein Array ist?

          weil wenn es mir aus array ausgespuckt wurde und ich davon irgendwo gelesen habe das cookies als array abgespeichert werden. Denn ich speicher ja nicht nur ein Wert ab sonder 2 werte und zwar user und passwort

          Wie viel später? Genauer gefragt: Wie viele Requests später?
          Steht im Script! Echo.... Ausgabe...

          Dir ist klar, das zwischen Setzen und Auslesen eines Cookie ein weiterer Request statt finden muss?
          Das ist logisch, gell?

          ja wieso wo ist nun das problem? ich schreibe ein cookie und mit dem nächsten request lese ich den cookie mein array wieder aus was ich  mit echo mache

          1. Hi,

            ... und hier davon ausgehst das $_COOKIE['$cookie_user'] ein Array ist?
            weil wenn es mir aus array ausgespuckt wurde und ich davon irgendwo gelesen habe das cookies als array abgespeichert werden.

            Cookie_s_ ja[1]. Ein einzelner Cookie besteht jedoch nur aus einem String.

            Denn ich speicher ja nicht nur ein Wert ab sonder 2 werte und zwar user und passwort

            Nein, Du speicherst einen Wert ab, nämlich das Passwort. Als Namen verwendest Du den Benutzernamen.

            Wie viel später? Genauer gefragt: Wie viele Requests später?
            Steht im Script! Echo.... Ausgabe...
            Dir ist klar, das zwischen Setzen und Auslesen eines Cookie ein weiterer Request statt finden muss?
            Das ist logisch, gell?
            ja wieso wo ist nun das problem? ich schreibe ein cookie und mit dem nächsten request lese ich den cookie mein array wieder aus was ich  mit echo mache

            Dein Code bietet nicht den geringsten Hinweis darauf, dass das Script beendet, der Client die Antwort auswerten, einen neuen Request absenden und Dein Script neu gestartet würde, geschweige denn dass anschließend auf das Vorhandensein eines speziellen Cookies reagiert würde.

            Cheatah

            [1] Genauer gesagt werden sie Dir von PHP als Array zur Verfügung gestellt. Die Speicherung sieht anders aus.

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hi Cheatah,

              ... und hier davon ausgehst das $_COOKIE['$cookie_user'] ein Array ist?
              Nein, Du speicherst einen Wert ab, nämlich das Passwort. Als Namen verwendest Du den Benutzernamen.

              ja, für das Speichern stimmt das. Beim Lesen sieht es für mich aber eher so aus, als ob Sabine das String-Literal '$cookie_user' als Namen verwendet.

              Dein Code bietet nicht den geringsten Hinweis darauf, dass das Script beendet, der Client die Antwort auswerten, einen neuen Request absenden und Dein Script neu gestartet würde, geschweige denn dass anschließend auf das Vorhandensein eines speziellen Cookies reagiert würde.

              ACK. Das ursprünglich gepostete Code-Fragment sah so aus, als ob die Absicht, ein Cookie zu setzen, und das Lesen des noch nicht gesetzten Cookies in einem Aufwasch geschehen sollten. Und es ist in unserem gewohnten, von kausalen Systemen geprägten Alltag eher ungewöhnlich, dass die Wirkung bereits vor der Ursache eintritt.

              [1] Genauer gesagt werden sie Dir von PHP als Array zur Verfügung gestellt. Die Speicherung sieht anders aus.

              In der Regel ja, denn sie ist browserspezifisch, und es gibt keine Vorschrift dafür, wie ein Browser seine Cookies zu speichern hat. Es könnte eine Datei pro Cookie sein, es könnten Datensätze in einer Datenbank sein, es könnten Elemente in einer XML-Datei sein, usw.

              So long,
               Martin

              --
              Ich bin 30. Ich demensiere apokalyptisch.
                (Orlando)
              1. ... und hier davon ausgehst das $_COOKIE['$cookie_user'] ein Array ist?
                Nein, Du speicherst einen Wert ab, nämlich das Passwort. Als Namen verwendest Du den Benutzernamen.

                ja, für das Speichern stimmt das. Beim Lesen sieht es für mich aber eher so aus, als ob Sabine das String-Literal '$cookie_user' als Namen verwendet.

                $cookie_user ist der Benutzername der aus einem Formularfeld kommt. Da aber jeder Benutzer gewöhnlich einen anderen Benutzername habe muß ich mit variablen arbeiten. Auch wenn clientseitig es sich immer um den selber unser handelt der soll ja letztendlich im cookie abgespeichert werden wenn die checkbox aktiviert wurde.

                Dein Code bietet nicht den geringsten Hinweis darauf, dass das Script beendet, der Client die Antwort auswerten, einen neuen Request absenden und Dein Script neu gestartet würde, geschweige denn dass anschließend auf das Vorhandensein eines speziellen Cookies reagiert würde.

                Wieso mit dem aufruf des script wird der request erzeugt und der cookie clientseitig geschrieben (so wollte ich es haben...) und zur überprüfung lese ich anschließend den cookie meines clients aus.

                ACK. Das ursprünglich gepostete Code-Fragment sah so aus, als ob die Absicht, ein Cookie zu setzen, und das Lesen des noch nicht gesetzten Cookies in einem Aufwasch geschehen sollten. Und es ist in unserem gewohnten, von kausalen Systemen geprägten Alltag eher ungewöhnlich, dass die Wirkung bereits vor der Ursache eintritt.

                ich verstehe dich nicht! ich schreibe ein cookie und lese ihn anschließend aus aber das funktioniert irgendwie nicht weil irgendwas am array falsch ist

                [1] Genauer gesagt werden sie Dir von PHP als Array zur Verfügung gestellt. Die Speicherung sieht anders aus.

                ja wie denn? wenn du es schon weisst warum sagst du es nicht weil ich komme echt nicht weiter...

                1. Moin,

                  Wieso mit dem aufruf des script wird der request erzeugt und der cookie clientseitig geschrieben (so wollte ich es haben...) und zur überprüfung lese ich anschließend den cookie meines clients aus.

                  Genau dieses funktioniert so nicht!
                  lulu schrieb dir das _zwischen_ dem lesen und schreiben eines cookies ein Request stattfinden muss.

                  ja wie denn? wenn du es schon weisst warum sagst du es nicht weil ich komme echt nicht weiter...

                  Hm Kopf benutzen und richtig lesen...
                  Dieser Teil der Diskussion ist für Deine Frage realtiv unerheblich, würde allerdings den Horizont erweitern.
                  Die Speicherung eines Cookies wird _auschliesslich_ Clientseitig geregelt!
                  WIE und OB dies passiert, darauf hast Du überhaupt keinen Einfluss.

                  Die üblichen Sicherheitsbedenken bzgl Cookies und Passwort kennst du?
                  UND Warum benutzt Du keine Sessions?
                  Und Warum hinterlegst Du beide Informationen in einem Cookie? reicht nicht eine und eine Gültigkeistabfrage bzgl. des cookies?

                  1. Die üblichen Sicherheitsbedenken bzgl Cookies und Passwort kennst du?
                    UND Warum benutzt Du keine Sessions?
                    Und Warum hinterlegst Du beide Informationen in einem Cookie? reicht nicht eine und eine Gültigkeistabfrage bzgl. des cookies?

                    Ja die kenne ich, ich setze ja bereits Sessions ein nur meine Kunden vergessen immer Ihr Passwort beim nächsten Login da wollte ich eine Abfrage bauen ob das Passwort im Eingabefeld gespiechert werden soll!?

                    Ja Klar ist das eine Browser Einstellung aber das erkläre mal einen Dummie...

                    Die Session ist ja nach dem schließen des Browserfenster beendet, ich wüßte nicht wie ich die länger am leben behalte...?

                2. Hallo Sabine,

                  $cookie_user ist der Benutzername der aus einem Formularfeld kommt. Da aber jeder Benutzer gewöhnlich einen anderen Benutzername habe muß ich mit variablen arbeiten.

                  ja, aber genau das tust du nicht. Denn in einfachen Anführungszeichen '' werden in PHP keine Variablennamen aufgelöst, dein Cookie hat also exakt den Namen $_COOKIE['$cookie_user']. Da wird kein Benutzername mehr eingesetzt.

                  Wieso mit dem aufruf des script wird der request erzeugt und der cookie clientseitig geschrieben (so wollte ich es haben...) und zur überprüfung lese ich anschließend den cookie meines clients aus.

                  Aber du bist anscheinend einem Denkfehler aufgesessen: Erst wenn das Script *fertig* ausgeführt ist, wird der ausgegebene Code zum Client übertragen und dort interpretiert, u.a. das Cookie gesetzt (falls es der Benutzer zulässt). Das Zurücklesen des Cookies kann erst erfolgen, wenn dein Script ein weiteres Mal aufgerufen wird - dann sendet der Client nämlich das Cookie unaufgefordert wieder mit, und dein PHP-Script kann es auswerten.

                  Was du tust, ist so ähnlich, als würdest du einem Kunden eine Rechnung stellen und im gleichen Umschlag auch schon eine Mahnung schicken, weil er den Rechnungsbetrag noch nicht bezahlt hat: Du musst ihm erst einmal die Gelegenheit dazu geben.

                  Und es ist in unserem gewohnten, von kausalen Systemen geprägten Alltag eher ungewöhnlich, dass die Wirkung bereits vor der Ursache eintritt.
                  ich verstehe dich nicht! ich schreibe ein cookie und lese ihn anschließend aus ...

                  Nein, du schreibst kein Cookie. Das wird erst geschrieben, wenn der Client das Ergebnis deines Scripts erhält. Du schreibst nur die Anweisung, der Client möge bitte ein Cookie setzen.

                  [1] Genauer gesagt werden sie Dir von PHP als Array zur Verfügung gestellt. Die Speicherung sieht anders aus.
                  ja wie denn? wenn du es schon weisst warum sagst du es nicht weil ich komme echt nicht weiter...

                  Das ist für dich unerheblich. Die Speicherung in PHP erfolgt als Array, das ist ja okay. In der Form greifst du auch auf die Daten zu. Wie der Browser des Besuchers diese Daten speichert, ist völlig unerheblich - der Mechanismus, mit dem er sie bekommt und wieder zurückgibt, ist festgelegt (das ist Teil des HTTP-Protokolls), und wie diese Daten in PHP verwaltet werden, ist auch festgelegt.

                  So long,
                   Martin

                  --
                  Ich stehe eigentlich gern früh auf.
                  Außer morgens.
                  1. Aber du bist anscheinend einem Denkfehler aufgesessen: Erst wenn das Script *fertig* ausgeführt ist, wird der ausgegebene Code zum Client übertragen und dort interpretiert, u.a. das Cookie gesetzt (falls es der Benutzer zulässt). Das Zurücklesen des Cookies kann erst erfolgen, wenn dein Script ein weiteres Mal aufgerufen wird - dann sendet der Client nämlich das Cookie unaufgefordert wieder mit, und dein PHP-Script kann es auswerten.

                    Ja wieso ich rufe doch das Script 2 mal auf, das erste mal schreibe ich ein cookie dann mache ich ein reload und habe den 2. request. Geht das etwa nicht, muss ich dann ein anderes script aufrufen?

  2. Hi,

    ich bastel hier seit Stunden ein einem einfachen Script herum woran ich schon langsam verzweifel, weil ich einfach nur noch Bahnhof verstehe...
    Ich möchte Username und Passwort in im Cookie speichern später mein cookie wieder auslesen aber das geht bei mir nicht!?

    if (isset($_REQUEST['checkbox_cookie'])):
       $cookie_user = $_REQUEST['username'];
       $cookie_pass = $_REQUEST['passwort'];
       @setcookie($cookie_user,$cookie_pass,time()+(3600*24));

    setcookie nimmt keine Änderung an $_COOKIE vor, es setzt schlicht und einfach einen Eintrag im Header der HTTP-Response.

    foreach ($_COOKIE['$cookie_user'] as $name => $value) {

    Dieser Zugriff muß daher scheitern, wenn das Cookie nicht schon vorher gesetzt war.
    Daß innerhalb von '' keine Variablen ersetzt werden, ist Dir bewußt?

    Was ist hier falsch bzw wie muss es richtig heissen?

    HTTP (und Cookies) funktionieren anders als Du denkst.

    Vereinfacht (für Deinen Fall):
    Der Browser schickt einen Request an den Server, dabei stehen evtl. bereits vorhandene Cookies dieses Servers im Header.

    Da es um ein PHP-Script geht: der Server übergibt den Request an den PHP-Interpreter.

    Der PHP-Interpreter untersucht den Request und füllt anhand dessen diverse Arrays:
    $_GET mit den Parametern aus der URL, $_POST mit POST-Parametern aus dem Body, $_COOKIE mit bereits vorhandenen Cookies, ...

    Dein Script wird gestartet.

    Dein Script nutzt setcookie. Damit wird in den Header der Response (also in das, was an den Browser als Antwort geschickt wird) der Eintrag für Dein Cookie vorgenommen - falls noch nichts vom body der Response (nicht zu verwechseln mit dem body der HTML-Seite) geschrieben wurde.
    GANZ WICHTIG: Eine Änderung an $_COOKIE findet dabei nicht statt.

    Irgendwann ist Dein Script fertig.
    Dann erhält der Browser die Antwortseite und findet dabei im HTTP-Header Deinen Cookie-Eintrag.

    Je nach Browsereinstellungen ignoriert er das oder merkt es sich. Gehen wir mal davon aus, daß der User das Speichern des Cookies erlaubt hat.

    Falls jetzt nochmal eine Anfrage des Browsers an Deinen Server kommt (und die Lebenszeit des Cookies noch nicht abgelaufen ist und der Cookie-Pfad paßt), wird er es im Header dieses neuen Requests mitgeschickt.

    Falls dieser neue Request wieder ein PHP-Script auf Deinem Server anstößt:

    Der PHP-Interpreter untersucht den neuen Request und füllt anhand dessen diverse Arrays:
    $_GET mit den Parametern aus der URL, $_POST mit POST-Parametern aus dem Body, $_COOKIE mit dem jetzt tatsächlich vorhandenen Cookie, ...

    Dein Script wird gestartet. Jetzt, bei diesem zweiten Script-Aufruf findet sich Dein Cookie in $_COOKIE.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.