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.
0
/**
1
* This function set the cookie
2
*
3
* @param $agrs
4
*/
5
function setMyCookie( $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.
0
/**
1
* This function set the cookie
2
*
3
* @param $agrs
4
*/
5
function setMyCookie( $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.
0
$agrs = (
1
"name" => 'Visitor',
2
"value" => json_encode(0, "sites" => ())), // Dynamische variablen, die bei jedem Aufruf oder in bestimmten Zeit abständen aktualisiert werden können
("totalvisits" => 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.
0
/**
1
* This function gets the cookie
2
*
3
* @param $args - The with arguments to expand
4
*
5
* @return mixed
6
*/
7
function getMyCookie( $args = [
8
return (isset($args["name"]) && isset($_COOKIE[$args["name"]]) ? json_decode($_COOKIE[$args["name"]]) : $_COOKIE);
9
}
10
11
// Alle Cookies
12
'<pre>';
13
var_dump(getMyCookie());
14
'</pre>';
15
16
// Ein bestimmter Cookie, der den wir gesetzt haben oben mit den Namen visitor
17
'<pre>';
18
var_dump(getMyCookie('Visitor')));
("name" => 19
'</pre>';
// Ein bestimmter Cookie, der den wir gesetzt haben oben mit den Namen visitor
object(stdClass)#1 (2) {
["totalvisits"] => int(0)
["sites"] => string(0)
}
// 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)
}
}
}
// 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.
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( ('name' => $name));
10
$uribase = (basename(str_replace( ('-', '.php'), '', $_SERVER[
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 = ();
18
$agrs['name'] = $name;
19
$agrs['value'] = json_encode( ("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.
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[
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 = ();
16
$args['name'] = 'Visitor';
17
$args['value'] = json_encode( ("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.
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[
9
setcookie($name, null, -1, '/');
10
} else {
11
if (isset($_SERVER['HTTP_COOKIE'])) {
12
$cookies = (';', $_SERVER['HTTP_COOKIE']);
13
foreach ($cookies as $cookie) {
14
$parts = ('=', $cookie);
15
$remove = ($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.
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 $agrs
16
*/
17
public function setMyCookie( $agrs = ()) {
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
'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[
45
}
46
47
/**
48
* This function gets the cookie
49
*
50
* @param $args
51
*
52
* @return mixed
53
*/
54
public function getMyCookie( $args = ()) {
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( ('name' => $name));
69
$uribase = (basename(str_replace( ('-', '.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 = ();
77
$agrs['name'] = $name;
78
$agrs['value'] = json_encode( ("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 = (';', $_SERVER['HTTP_COOKIE']);
101
foreach ($cookies as $cookie) {
102
$parts = ('=', $cookie);
103
$remove = ($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...
0
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 = ();
11
$args[
12
$args['value'] = json_encode( ("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
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
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
'<pre>';
39
var_dump($COOKIE->getMyCookie( ("name" => 'Visitor')));
40
'</pre>';
41
42
</div>
43
</body>
44
</html>
Anzeige