Ankündigung

Einklappen
Keine Ankündigung bisher.

Cookies: verschiedene Fragen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cookies: verschiedene Fragen

    Hallo.

    Danke für Eure Zeit und Mühen. Hier meine Fragen:

    1.
    Wie lösche ich einen Cookie?

    2.
    Kann ich einen Array in einem Cookie benutzen (Einlesen/Auslesen)?

    3.
    Yahoo Mail und andere bieten ein "Remember my Login" über Cookies an. Wie wird dies geschafft, ohne zur signifikanten Sicherheitslücke zu werden? Dasselbe will ich auch tun.
    Was ist ein Hash (betrifft Passwort-Speicherung in der DB)?

    Ich habe bereits im Forum recherchiert und diverse Cookie-betreffende Beiträge gelesen, bin aber in diesen drei Punkten noch nicht von Weisheit erleuchtet worden (obwohl teilweise gute Beiträge im Forum vorhanden sind). Ich würde mich daher sehr über Eure Hilfen freuen.

    Grüße,

    Sven
    sigpic
    Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
    Sven

  • #2
    Ein Cookie kann man löschen, in dem man das gleiche Cookie nochmal setzt, mit einer negativen Gültigkeitsdauer. Eine andere Möglichkeit ist mir nicht bekannt.

    Um ein Array in einem Cookie zu nutzen, mache ich aus dem Array einen String mit serialize(). Beim Auslesen dann unserialize(), um das Array wieder zu bekommen.

    Edit: Den Serialize String könnte man noch mit base64_encode() bearbeiten und dann ins Cookie setzen. Dann gibt es keine Probleme mit irgendwelchen Zeichen.

    Kommentar


    • #3
      Hallo Afrob,

      zunächst vielen Dank für Deine Mühe und Zeit. Dein Lösungsvorschlag ist sehr interessant, und ich habe versucht, ihn umzusetzen.

      Nach erfolgreichem Login wird ein Cookie gespeichert, der den Username und das Password beinhaltet (hier noch vollkommen unkodiert). Der LoginDatensatz enthält die gewünschten Daten.


      Nach erfolgreichem Login (Login-Check-Page)
      PHP-Code:
      <?php
      $Info
      =array("Username"=>$LogInDatensatz["Username"],"Password"=>$LogInDatensatz["Password"]);
      $Daten=serialize($Info);
      setcookie("FNR",$Daten,time()+3600,"/","Navis.TerraRomana.org");
      ?>

      Auf der Login-Seite dagegen befindet sich der Auslesecode, der aus Testgründen zunächst nichts weiter tun soll als die zwei Werte anzuzeigen.


      Vor dem Login (Login-Page)
      PHP-Code:
      <?php
       $Daten
      =$_COOKIE["FNR"];
       
      $Info=unserialize($Daten);
       echo(
      $Info["Username"]." - ".$Info["Password"]);
      ?>

      Jedoch wird nichts als der von mir vorgegebene Verbindungsstrich (zwischen den Werten) angezeigt. Ich meine, ich hätte alles richtig gemacht. Siehst Du das auch so? Liegt der Fehler an mir?

      Bitte helfe mir nochmals darin, wenn Du die Zeit hast. Vielen Dank. Grüße,

      Sven
      sigpic
      Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
      Sven

      Kommentar


      • #4
        Der Code sieht grundsätzlich richtig aus für mich. Checke halt mal genau, ob alle Variablen/Arrays richtige Werte haben. Arrays mit print_r() ausgeben. Wurde das Cookie auch wirklich gesetzt? Beachte auch, dass du bevor du das Cookie ausliest keine echo Ausgaben machst! Und schreibe ganz am Anfang vom Script error_reporting(E_ALL);, vielleicht werden wichtige Fehlermeldungen unterdrückt.

        Kommentar


        • #5
          Zitat von Afrob
          Der Code sieht grundsätzlich richtig aus für mich. Checke halt mal genau, ob alle Variablen/Arrays richtige Werte haben. Arrays mit print_r() ausgeben. Wurde das Cookie auch wirklich gesetzt? Beachte auch, dass du bevor du das Cookie ausliest keine echo Ausgaben machst! Und schreibe ganz am Anfang vom Script error_reporting(E_ALL);, vielleicht werden wichtige Fehlermeldungen unterdrückt.
          Hallo Afrob,

          mein PHP-Code transformt den Array ordnungsgemäß in einen serialisierten String, und speichert den Cookie ebenfalls ordnungsgemäß.

          Auch wird der serialisierte String ordnungsgemäß aus dem Cookie wieder ausgelesen. Jedoch - und hier kommt das Problem - wird der serialisierte String nicht mittels "unserialize()" wieder in einen Array verwandelt (siehe Code). Woran liegt's? Kannst Du es erkennen?

          PHP-Code:
          <?php
           $Daten
          =$_COOKIE["FNR"];
           
          $Info=unserialize($Daten);   // Test-Routine folgt:
               
          echo("Daten: ".$Daten."
          "
          );
               echo(
          "
          Unserialized Daten zu Info Indexes: "
          .$Info["Username"]." und ".$Info["Password"]."
          Print_R: "
          );
               
          print_r($Info);
          ?>
          Dies führt zu folgender Anzeige im Browser:

          Daten: a:2:{s:8:\"Username\";s:15:\"Sven Littkowski\";s:8:\"Password\";s:7:\"Higgins\";}

          Unserialized Daten zu Info Indexes: und
          Print_R


          $Daten wird also noch erkannt, aber die Umformung haut nicht mehr hin. Kannst Du den Fehler erkennen, den zu entdecken mir versagt bleibt? Grüße,

          Sven
          sigpic
          Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
          Sven

          Kommentar


          • #6
            Hallo Afrob,

            mein PHP-Code transformt den Array ordnungsgemäß in einen serialisierten String, und speichert den Cookie ebenfalls ordnungsgemäß.

            Auch wird der serialisierte String ordnungsgemäß aus dem Cookie wieder ausgelesen. Jedoch - und hier kommt das Problem - wird der serialisierte String nicht mittels "unserialize()" wieder in einen Array verwandelt (siehe Code). Woran liegt's? Kannst Du es erkennen?

            PHP-Code:
            <?php
             $Daten
            =$_COOKIE["FNR"];
             
            $Info=unserialize($Daten);   // Test-Routine folgt:
                 
            echo("Daten: ".$Daten."
            "
            );
                 echo(
            "
            Unserialized Daten zu Info Indexes: "
            .$Info["Username"]." und ".$Info["Password"]."
            Print_R: "
            );
                 
            print_r($Info);
            ?>
            Dies führt zu folgender Anzeige im Browser:

            Daten: a:2:{s:8:\"Username\";s:15:\"Sven Littkowski\";s:8:\"Password\";s:7:\"Higgins\";}

            Unserialized Daten zu Info Indexes: und
            Print_R


            $Daten wird also noch erkannt, aber die Umformung haut nicht mehr hin. Kannst Du den Fehler erkennen, den zu entdecken mir versagt bleibt? Grüße,

            Sven
            sigpic
            Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
            Sven

            Kommentar


            • #7
              Eine weitere Frage ist, wie ich sicherstelle, daß nur meine Website den Cookie lesen darf.

              Ich denke, es gibt da die Möglichkeit, die erlaubte Website im Cookie zu nennen. Wie ist dafür die richtige Schreibweise, wenn die Ziel-Website "http://Loesung.DesProblems.de" heißt?

              Sven
              sigpic
              Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
              Sven

              Kommentar


              • #8
                HEUREKA!

                Es hat geklappt. Alles funktioniert jetzt. Ich hätte zwecks Kompatibilität vor dem Cookiesetzen "base64_encode($Daten)" verwenden sollen, und nach dem Cookieauslesen und vor unserialize "base64_decode($Daten)".

                Vielen Dank an alle, vielen Dank an Afrob.

                Sven
                sigpic
                Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
                Sven

                Kommentar


                • #9
                  Wie ich oben sagte :wink:

                  Das mit der Cookie Domain kann man glaube ich vernachlässigen, weil bei keiner Angabe automatisch die Domain genommen wird, von der Site die das Cookie gesetzt hat.

                  Kommentar


                  • #10
                    Hm-hm, ich werde also die Domains weglassen. Danke, Afrob.
                    sigpic
                    Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
                    Sven

                    Kommentar

                    Lädt...
                    X