PHP Cookie setzen, auslesen und löschen

Anzeige

Letzte Aktualisierung : |  

Ein HTTP Cookie (Magic Cookie) ist ein kleines bzw. kurzes Datenpaket welches zwischen Webseite (Domain) und Klient (Surfer) ausgetauscht wird. Und hier geht es darum wie man mit PHP Cookie setzt. Dabei wird ein Cookie vom Server an den Browser gesendet und beim Klienten auf den Rechner platziert. Oder der Cookie wird direkt mit JavaScript erzeugt und so vom Browser beim Klienten platziert.

Solange der Cookie sich auf dem Rechner des Klienten befindet, wird dieser bei jeder neuen Anforderung der Webseite (Domain) das Datenpaket an den Server senden. So kann dieser User Identifiziert werden und ist für uns kein unbekannter mehr, weil wir ein Profil erstellen können um so öfter er die Seite besucht.



Cookies im Browser löschen

Das Löschen von Cookies in deinem Browser ist ein einfacher Prozess, der dazu beitragen kann, deine Online-Privatsphäre zu schützen. Cookies sind kleine Dateien, die von Websites gespeichert werden, um Benutzereinstellungen und andere Informationen zu speichern. Hier ist, wie du Cookies in den gängigsten Browsern löschen kannst:



  • Google Chrome: Klicke auf die drei vertikalen Punkte in der oberen rechten Ecke > Einstellungen > Datenschutz und Sicherheit > Browserdaten löschen > Cookies und andere Site-Daten auswählen > Löschen.
  • Firefox: Klicke auf die drei horizontalen Linien in der oberen rechten Ecke > Einstellungen > Datenschutz & Sicherheit > Cookies und Website-Daten > Daten entfernen.
  • Safari: Gehe zu Safari > Einstellungen > Datenschutz > Alle Website-Daten entfernen.
  • Microsoft Edge: Klicke auf die drei horizontalen Punkte in der oberen rechten Ecke > Einstellungen > Datenschutz, Suche und Dienste > Browserdaten löschen > Cookies und andere Site-Daten auswählen > Löschen.


Das regelmäßige Löschen von Cookies kann dir helfen, die Kontrolle über deine persönlichen Daten zu behalten und die Verfolgung durch Websites zu minimieren. Probier es aus und behalte die Kontrolle über deine Online-Privatsphäre.



Beispiele für Datenpakete

Die erste frage nachdem man wohl herausgefunden hat wie Cookies funktionieren, will man natürlich wissen was nun speichern. Deshalb hier ein paar Beispiele:


  • Nehmen wir ein HTTP_USER_AGENT und holen uns dort was wir für sinnvoll halten, wenn der User-Agent den existiert.
  • Wir könnten die Sprache dazu nehmen mit HTTP_ACCEPT_LANGUAGE
  • Wir könnten die IP-Adresse Verschlüsseln und Speichern, wenn sie den existiert.
  • Wir können alles mögliche für Daten sammeln, welche Seiten besucht, wie lange welche Seite, Verweildauer...
$_SERVER["HTTP_USER_AGENT"]$_SERVER["HTTP_LANGUAGE"]

Hier findest Du noch mehr Server Variablen  $_SERVER

Du kannst Cookies für einiges nutzen z.B. wie ein Login-System (hier wird auch bei der Session eine gesetzt automatisch) oder auch ein Online-Shop (für Warenkorb).



Datenschutz Grundverordnung

Beachte auch die DSGVO und erkundige Dich was für Dich notwendig ist, es kommt darauf an was Du für eine Webseite betreibst.



Cookie füllen und platzieren

Wir bauen uns eine Funktion die uns das erstellen eines Cookies vereinfacht und auch Prüft. In der ersten Lösung sind alle variablen einzeln aufgelistet jedoch reicht es wenn nur die $args variable reingeschickt wird.

Um später mit JavaScript auf die Cookies zuzugreifen müssen wir drei dinge beachten. Das ist zu einem das wir httponly auf false setzen und das wir mit json_encode so wie den Namen nicht mit irgendwelchen Sonderzeichen behandeln.

Hier eine Funktion um ein Cookie zu platzieren, diese Funktion kann überall sein in deinem Script jedoch muss der Aufruf dieser Funktion passieren bevor etwas ausgegeben wird. Also das bedeutet das nichts anderes davor an den Klienten (Browser) gesendet werden darf, weder mit echo noch pur HTML.


// PHP CODE
     0  /**  1   * This function set the cookie  2   *  3   * @param array $agrs  4   */  5  function setMyCookie(array $agrs = []) {  6      // Prüfen ob $args vorhanden und der header nicht gesendet wurde  7      if ($agrs && !headers_sent($filename, $linenum)) {  8          // @see http://php.net/manual/de/function.setcookie.php  9          return setcookie(  10                  $agrs['name'], // Der Name des Cookies  11                  $agrs['value'], // Der Wert des Cookies  12                  $agrs['expire'], // Ablaufzeit des Cookies  13                  $agrs['path'], // Welche Pfade sind erlaubt für diesen Cookie auf dem Server  14                  $agrs['domain'], // Die Domain für den der Cookie erreichbar ist  15                  $agrs['secure'], // Der Cookie wird nur über Sichere Verbindungen gesetzt und gelesen  16                  $agrs['httponly'] // Wenn auf TRUE wird nur die unsichere Verbindung genutzt  17          );  18      }  19      //.. ist der header bereits gesendet  20      else {  21          // Prüfen ob hilfsvariablen vorhanden  22          if (isset($filename) && isset($linenum)) {  23              // Eigenen Fehler herbeiführen, damit es angezeigt oder in der log festgehalten wird   24              //trigger_error("Cookie could not be set on $filename line $linenum while header sent", E_USER_ERROR);  25          }  26          return false;  27      }  28  } 

    Du kannst diese Funktion verkürzen in dem du einfach die $args variable nur platzierst, so wie hier im Beispiel.


    // PHP CODE
       0  /**  1   * This function set the cookie  2   *  3   * @param array $agrs  4   */  5  function setMyCookie(array $agrs = []) {  6      // Check if $args and header not sent  7      if ($agrs && !headers_sent($filename, $linenum)) {  8          // @see http://php.net/manual/de/function.setcookie.php  9          return setcookie($agrs);  10      }  11      //.. is header sent or no args then do this  12      else {  13          // Check if header variables  14          if (isset($filename) && isset($linenum)) {  15              // Send error to admin or write in log file  16              // trigger_error("Cookie could not be set on $filename line $linenum while header sent", E_USER_ERROR);  17          }  18          return false;  19      }  20  } 

      So könnte dann Dein array aussehen was Du reinschicken wirst, siehe oben, dort haben wir alles beschriftet mit Kommentaren.


      // PHP CODE
         0  $agrs = array(  1     "name" => 'Visitor',  2     "value" => json_encode(array("totalvisits" => 0, "sites" => array())), // Dynamische variablen, die bei jedem Aufruf oder in bestimmten Zeit abständen aktualisiert werden können  3     "expire" => (time() + 2592000),  4     "path" => "/",  5     "domain" => "localhost",  6     "secure" => false,  7     "httponly" => false // Wenn nicht false dann können wir mit JavaScript nicht drauf zugreifen  8  );  9    10  // Aufruf unserer Funktion  11  setMyCookie($agrs); 

        Wir füllen alles was wir benötigen und schicken diese rein um diese Daten zu speichern die sich in value befinden. Mit expire legen wir die Ablaufzeit fest. Bei path erlauben wir mit dem slash das dieser Cookie auf der ganzen Webseite zugriff hat, jedoch könnten wir den Zugriff einschränken auf bestimmte Seiten. Domain ist glaub ich selbsterklärend :) so wie diese, secure ist für HTTPS für sichere Verbindungen und httponly nur für HTTP zugriffe.



        Auslesen des Cookies

        Natürlich möchten wir auch unsere Cookies auslesen und auswerten. Und dafür gibt es auch eine Lösung von PHP, Du kannst ein Cookie direkt ansprechen oder auch alle auf einmal.


        // PHP CODE
           0  /**  1   * This function gets the cookie   2   *  3   * @param array $args - The array with arguments to expand  4   *  5   * @return mixed   6   */  7  function getMyCookie(array $args = []) {  8      return (isset($args["name"]) && isset($_COOKIE[$args["name"]]) ? json_decode($_COOKIE[$args["name"]]) : $_COOKIE);  9  }  10    11  // Alle Cookies  12  echo '<pre>';  13  var_dump(getMyCookie());  14  echo '</pre>';  15    16  // Ein bestimmter Cookie, der den wir gesetzt haben oben mit den Namen visitor  17  echo '<pre>';  18  var_dump(getMyCookie(array("name" => 'Visitor')));  19  echo '</pre>'; 

          // OUTPUT CODE
          // Ein bestimmter Cookie, der den wir gesetzt haben oben mit den Namen visitor
          object(stdClass)#1 (2) {
            ["totalvisits"] => int(0)
            ["sites"] => string(0)
          }

          // OUTPUT CODE
          // Nach erneutem Aufruf in Kombination mit hasMyCookie() und updateMyCookie()
          object(stdClass)#1 (2) {
            ["totalvisits"] => int(2)
            ["sites"]=>
            object(stdClass)#3 (2) {
              ["second"]=>
              object(stdClass)#2 (2) {
                ["url"] => string(36) "Sites/NetBeans/PHP-Cookie/second.php"
                ["hits"] => int(1)
              }
              ["index"]=>
              object(stdClass)#4 (2) {
                ["url"] => string(35) "Sites/NetBeans/PHP-Cookie/index.php"
                ["hits"] => int(1)
              }
            }
          }

          // OUTPUT CODE
          // In JavaScript
          {totalvisits: 2, 
              sites: 
                  index: hits: 1 url: "Sites/NetBeans/PHP-Cookie/index.php" 
                  second: hits: 1 url: "Sites/NetBeans/PHP-Cookie/second.php"
          }


          Aktualisieren des Cookie Inhaltes

          Wir möchten auch die Information in unserem Cookie aktuell halten und so gut wie möglich Profilern in dem wie den User verfolgen und jeden seiner schritte festhalten.


          // PHP CODE
             0  /**  1   * This function update the cookie by name  2   *  3   * @param string $name - Name of the cookie  4   *  5   * @return bool   6   */  7  function updateMyCookie($name = '') {  8    9      $cookie = getMyCookie(array('name' => $name));  10      $uribase = trim(basename(str_replace(array('-', '.php'), '', $_SERVER["REQUEST_URI"])), '/');  11    12      if (is_object($cookie->sites->$uribase)) {  13          $cookie->sites->$uribase->url = $_SERVER["REQUEST_URI"];  14          $cookie->sites->$uribase->hits = ($cookie->sites->$uribase->hits + 1);  15      }  16    17      $args = array();  18      $agrs['name'] = $name;  19      $agrs['value'] = json_encode(array("totalvisits" => ($cookie->totalvisits + 1), "sites" => $cookie->sites));  20      $agrs['expire'] = (time() + (365 * 24 * 60 * 60 * 1000));  21      $agrs['path'] = "/";  22      $agrs['domain'] = "localhost";  23      $agrs['secure'] = false;  24      $agrs['httponly'] = false;  25    26      return setMyCookie($agrs);  27  }  28    29  updateMyCookie("Visitor"); 


            Mit PHP prüfen ob Cookie vorhanden

            Nach dem wir mit setMyCookie unseren Cookie platziert haben updaten wir mit jedem Aufruf unseren Cookie, jedoch darf nicht mehr setMyCookie aufgerufen werden. Deshalb helfen wir uns mit dieser Funktion in dem wir prüfen ob unser Cookie bereits gesetzt wurde.


            // PHP CODE
               0  /**  1   * This function gets the cookie   2   *  3   * @param string $name - Name of the cookie  4   *   5   * @return bool   6   */  7  function hasMyCookie($name = '') {  8      return (isset($_COOKIE[$name]) ? true : false);  9  }  10    11  // Wenn Cookie vorhanden, Du kannst dies natürlich jetzt auch dynamisch nutzen in dem Du z.B. eine hash versehene IP-Adresse hier reinschickst so hast du einen relative eindeutigen User, die Du mit anderen Daten verknüpfen kannst.  12  if (hasMyCookie("Visitor")) {  13      updateMyCookie("Visitor");  14  } else {  15      $args = array();  16      $args['name'] = 'Visitor';  17      $args['value'] = json_encode(array("totalvisits" => 0, "sites" => ''));  18      $args['expire'] = (time() + 2592000);  19      $args['path'] = "/";  20      $args['domain'] = "localhost";  21      $args['secure'] = false;  22      $args['httponly'] = false;  23      setMyCookie($args);  24  } 


              Mit PHP Cookie wieder entfernen

              Du kannst den Cookie oder alle Cookie selbstverständlich auch wieder löschen. Dies können wir wie folgt machen.


              // PHP CODE
                 0  /**  1   * This function delete the cookie by name  2   *  3   * @param string $name - Name of the cookie  4   */  5  function deleteMyCookie($name = '') {  6    7      if ($name) {  8          unset($_COOKIE[$name]);  9          setcookie($name, null, -1, '/');  10      } else {  11          if (isset($_SERVER['HTTP_COOKIE'])) {  12              $cookies = explode(';', $_SERVER['HTTP_COOKIE']);  13              foreach ($cookies as $cookie) {  14                  $parts = explode('=', $cookie);  15                  $remove = trim($parts[0]);  16                  if (unserialize($_COOKIE[$remove]) != false) {  17                      unset($_COOKIE[$remove]);  18                  }  19              }  20          }  21      }  22  }  23    24  // Aufruf unserer Funktion, weil sonst passiert nichts wenn wir dies nicht aufrufen :)  25  deleteMyCookie("Visitor"); 

                Wenn wir einen Namen mit schicken dann wird nur dieser Cookie entfernt, rufen wir die Funktion jedoch ohne einen String auf so werden alle Cookie entfernt die einen serialize string besitzen, damit wir nicht andere Cookies anfassen.



                Ein Nachteil oder nicht ?

                Der Nachteil, weil wir serverseitig arbeiten können wir nur bei einem Refresh der Seite User Interaktionen verfolgen und auch aufzeichnen. Doch deshalb gibt es JavaScript und damit können wir den Selben Cookie auslesen und somit noch mehr festhalten ohne die Seite jedesmal neu laden zu müssen. Sogar bis auf die Mausbewegung und welche Positionen sich der User aufhält kann so ermittelt werden und noch vieles mehr. Hier kannst Du diesen Cookie den wir oben platziert haben JavaScript auslesen  JavaScript - Cookies setzen und nutzen



                Komplette Cookie Lösung als Klasse

                Hier noch der Ganze Code jedoch in einer Klasse zusammengestellt und einsatzbereit, Du kannst den Namen der Klasse ändern und auch die Funktionen umbenennen. Lagere Deine Funktionen in Klassen und auch separat in Dateien so das Du den überblick nicht verlierst wenn Dein Projekt wächst.


                // PHP CODE
                   0  /**  1   * Description of Cookie  2   *  3   * @author      prod3v3loper  4   * @copyright   (c) 2023, prod3v3loper  5   * @package     MelAbuAi  6   * @subpackage  Cookie  7   * @since       1.0  8   * @link        http://www.tnado.com/  9   */  10  class MyCookie {  11    12      /**  13       * This function set the cookie   14       *  15       * @param array $agrs   16       */  17      public function setMyCookie(array $agrs = array()) {  18          $filename = '';  19          $linenum = '';  20          // Check if $args and header not sent   21          if ($agrs && !headers_sent($filename, $linenum)) {  22              // @see http://php.net/manual/de/function.setcookie.php   23              setcookie($agrs);  24          }  25          //.. is header sent or no args then do this   26          else {  27              // Check if header variables   28              if (isset($filename) && isset($linenum)) {  29                  // Send error to admin or write in log file  30                  echo 'can not send cookie';  31  //            trigger_error("Cookie could not be set on $filename line $linenum while header sent", E_USER_ERROR);  32              }  33          }  34      }  35    36      /**  37       * This function check if cookie exists  38       *  39       * @param string $name   40       *  41       * @return bool   42       */  43      public function hasMyCookie($name = '') {  44          return (isset($_COOKIE[$name]) ? true : false);  45      }  46    47      /**  48       * This function gets the cookie   49       *  50       * @param array $args   51       *  52       * @return mixed   53       */  54      public function getMyCookie(array $args = array()) {  55    56          return (isset($args["name"]) && isset($_COOKIE[$args["name"]]) ? json_decode($_COOKIE[$args["name"]]) : $_COOKIE);  57      }  58    59      /**  60       * This function update the cookie by name  61       *  62       * @param string $name   63       *  64       * @return bool   65       */  66      public function updateMyCookie($name = '') {  67    68          $cookie = $this->getMyCookie(array('name' => $name));  69          $uribase = trim(basename(str_replace(array('-', '.php'), '', $_SERVER["REQUEST_URI"])), '/');  70    71          if (is_object($cookie->sites->$uribase)) {  72              $cookie->sites->$uribase->url = $_SERVER["REQUEST_URI"];  73              $cookie->sites->$uribase->hits = ($cookie->sites->$uribase->hits + 1);  74          }  75    76          $args = array();  77          $agrs['name'] = $name;  78          $agrs['value'] = json_encode(array("totalvisits" => ($cookie->totalvisits + 1), "sites" => $cookie->sites));  79          $agrs['expire'] = (time() + (365 * 24 * 60 * 60 * 1000));  80          $agrs['path'] = "/";  81          $agrs['domain'] = "localhost";  82          $agrs['secure'] = false;  83          $agrs['httponly'] = false;  84    85          return $this->setMyCookie($agrs);  86      }  87    88      /**  89       * This function delete the cookie by name  90       *  91       * @param string $name  92       */  93      public function deleteMyCookie($name = '') {  94    95          if ($name) {  96              unset($_COOKIE[$name]);  97              setcookie($name, null, -1, '/');  98          } else {  99              if (isset($_SERVER['HTTP_COOKIE'])) {  100                  $cookies = explode(';', $_SERVER['HTTP_COOKIE']);  101                  foreach ($cookies as $cookie) {  102                      $parts = explode('=', $cookie);  103                      $remove = trim($parts[0]);  104                      if (unserialize($_COOKIE[$remove]) != false) {  105                          unset($_COOKIE[$remove]);  106                      }  107                  }  108              }  109          }  110      }  111    112  } 

                  So verwendest Du es als Objekt und es ist viel übersichtlicher ;) Du kannst natürlich attribute setzen mit setter und getter und so die arrays erstellen oder auch ausgelagert reinschicken etc...


                  // HTML CODE
                     0  <?php  1  require_once './php/cookie.php';  2  $COOKIE = new MyCookie();  3    4  // Löschen des cookies  5  // $COOKIE->deleteMyCookie("Visitor");  6     7  if ($COOKIE->hasMyCookie("Visitor")) {  8      $COOKIE->updateMyCookie("Visitor");  9  } else {  10      $args = array();  11      $args['name'] = 'Visitor';  12      $args['value'] = json_encode(array("totalvisits" => 0, "sites" => ''));  13      $args['expire'] = (time() + (365 * 24 * 60 * 60 * 1000));  14      $args['path'] = "/";  15      $args['domain'] = "localhost";  16      $args['secure'] = false;  17      $args['httponly'] = false;  18      $COOKIE->setMyCookie($args);  19  }  20  ?>  21  <!DOCTYPE html>  22  <html>  23      <head>  24          <meta charset="UTF-8">  25          <title>Cookies</title>  26          <link href="css/style.css" rel="stylesheet">  27          <script type="text/javascript" src="js/script.js"></script>  28      </head>  29      <body>  30          <div class="wrap">  31              <ul>  32                  <li><a href="index.php">Home</a></li>  33                  <li><a href="second.php">Second</a></li>  34              </ul>  35              <?php  36              // Alle Cookies wenn dieser cookie nicht vorhanden oder wenn Funktion ohne parameter aufgerufen wird  37              // Ein bestimmter Cookie, der den wir gesetzt haben oben mit den Namen visitor  38              echo '<pre>';  39              var_dump($COOKIE->getMyCookie(array("name" => 'Visitor')));  40              echo '</pre>';  41              ?>  42          </div>  43      </body>  44  </html> 


                    Anzeige

                    Dein Kommentar

                    * Diese Felder sind erforderlich, E-Mails werden nicht veröffentlicht
                    ?

                    Dieses Feld ist optional
                    Fülle dieses Feld aus und verbinde Dein Namen mit Deiner Website.

                    Die in dieses Kontaktformular eingegebenen Daten werden in unserem System gespeichert, um die Ausgabe des Kommentars sicherzustellen. Ihre E-Mail-Adresse wird gespeichert, um die Anzahl der Kommentare und die zukünftige Registrierung zu bestimmen

                    Ich habe gelesen die Datenschutzbestimmungen und Nutzungsbedingungen. Ich bestätige die Übermittlung des Formulars und die Übermittlung meiner Daten.
                    tnado © 2024 | Alle Rechte Vorbehalten
                    Made with by prod3v3loper