In diesem Thema werden der Ursprung von PHP-Cookies, die Eigenschaften von PHP-Cookies, die Verwendung der PHP-Cookie-Funktion und die praktischen Anwendungsbeispiele von PHP-Cookies anhand von Bildern, Texten und Videos umfassend vorgestellt. Es ist leicht zu verstehen! Begrüßen Sie Studenten von der chinesischen PHP-Website zum Lernen!
Erstens: Was sind Cookies?
Cookies werden häufig zur Identifizierung von Benutzern verwendet.
Ein Cookie ist eine kleine Datei, die der Server auf dem Computer des Benutzers hinterlässt.
Jedes Mal, wenn derselbe Computer eine Seite über den Browser anfordert, wird das Cookie von diesem Computer gesendet.
Mit PHP können Sie Cookie-Werte erstellen und abrufen.
Empfehlungen zu verwandten Themen: php-Sitzung
II: Die Geburt von Cookie
Da das HTTP-Protokoll zustandslos ist, muss das serverseitige Geschäft zustandsbehaftet sein.
Der ursprüngliche Zweck von Cookies bestand darin, Statusinformationen im Web zu speichern, um die serverseitige Nutzung zu erleichtern.
Ermitteln Sie beispielsweise, ob der Nutzer die Website zum ersten Mal besucht. Die neueste Spezifikation ist RFC 6265, eine Spezifikation, die von zusammenarbeitenden Browserservern implementiert wird.
Drei: Das Prinzip von Cookies
Wenn Sie die Website zum ersten Mal besuchen, sendet der Browser eine Anfrage. Nachdem der Server auf die Anfrage geantwortet hat, fügt er das Cookie in die Antwort ein Bei der ersten Anfrage wird das Cookie übermittelt und der Server identifiziert den Benutzer. Natürlich kann der Server auch den Cookie-Inhalt ändern.
Vier: Cookie-Attribute
Cookie ist eine kleine Textdatei von nicht mehr als 4 KB. Sie besteht aus einem Namen (Name), einem Wert (Value) und mehreren anderen, die zur Steuerung der Cookie-Gültigkeitsdauer verwendet werden. Sicherheit und Verwendung. Eine Reihe optionaler Attribute.
Name | stellt den Namen des Cookies dar. | ||||||||||||||
Wert |
|
||||||||||||||
🎜Gibt die Website oder Domain an, die auf das Cookie zugreifen kann. 🎜🎜Der Cookie-Mechanismus folgt nicht der strengen Same-Origin-Richtlinie, die es einer Subdomain ermöglicht, das Cookie ihrer übergeordneten Domain zu setzen oder abzurufen. 🎜 | |||||||||||||||
🎜 definiert das Verzeichnis auf der Website, in dem auf das Cookie zugegriffen werden kann. 🎜 | |||||||||||||||
🎜Was ist die Gültigkeitsdauer im Bild? Browser-Cookies werden standardmäßig gespeichert. Wenn der Browser geschlossen und die Sitzung beendet wird, wird das Cookie gelöscht. 🎜 | |||||||||||||||
🎜Geben Sie an, ob das HTTPS-Sicherheitsprotokoll zum Senden von Cookies verwendet werden soll. 🎜🎜Mithilfe des HTTPS-Sicherheitsprotokolls können Cookies bei der Übertragung zwischen Browser und Webserver vor Diebstahl und Manipulation geschützt werden. Diese Methode kann auch zur Identitätsauthentifizierung von Websites verwendet werden, d. h. während der Phase des HTTPS-Verbindungsaufbaus prüft der Browser die Gültigkeit des SSL-Zertifikats der Website. 🎜 | |||||||||||||||
HttpOnly td> | wird verwendet, um zu verhindern, dass clientseitige Skripte über das Attribut document.cookie auf Cookies zugreifen. Zum Schutz beitragen Cookies können nicht durch Cross-Site-Scripting-Angriffe gestohlen oder manipuliert werden. |
Fünf: PHP-Cookie-Funktion
1. setcookie – Cookie senden
setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
setcookie() definiert das Cookie und wird zusammen mit den verbleibenden HTTP-Headern an den Client gesendet.
Wie andere HTTP-Header müssen Cookies gesendet werden, bevor das Skript eine Ausgabe erzeugen kann (aufgrund von Protokolleinschränkungen).
Bitte rufen Sie diese Funktion auf, bevor Sie eine Ausgabe erzeugen (einschließlich und
oder Leerzeichen).Sobald das Cookie gesetzt ist, können Sie es mit $_COOKIE lesen, wenn Sie die Seite das nächste Mal öffnen.
Cookie-Wert existiert auch in $_REQUEST.
Parameter
Parameter | Beschreibung | ||||||||||||||||
name | Cookie-Name. | ||||||||||||||||
value |
| ||||||||||||||||
🎜Cookie-Ablaufzeit. 🎜🎜Dies ist ein Unix-Zeitstempel, die Anzahl der Sekunden seit der Unix-Epoche. 🎜🎜Mit anderen Worten, Sie können grundsätzlich das Ergebnis der Funktion time() plus die Anzahl der Sekunden verwenden, die ablaufen sollen. 🎜 | |||||||||||||||||
🎜Cookie Gültiger Serverpfad. 🎜🎜Wenn es auf „/“ gesetzt ist, ist das Cookie für die gesamte Domainnamen-Domain gültig. 🎜🎜Wenn es auf „/foo/“ gesetzt ist, ist das Cookie nur für das Verzeichnis /foo/ und seine Unterverzeichnisse in der Domäne gültig. 🎜🎜Der Standardwert ist das aktuelle Verzeichnis, wenn das Cookie gesetzt wird. 🎜 | |||||||||||||||||
🎜 Gültiger Domain-/Subdomainname für Cookie. 🎜🎜Legen Sie es als Subdomain-Namen fest, wodurch das Cookie für diesen Subdomain-Namen und seinen Domänennamen der dritten Ebene gültig wird. 🎜🎜Um das Cookie für den gesamten Domainnamen gültig zu machen, setzen Sie es einfach auf den Domainnamen. 🎜 | |||||||||||||||||
secure td> | 🎜Legen Sie fest, ob dieses Cookie nur über sichere HTTPS-Verbindungen an den Client weitergegeben wird. 🎜🎜Bei der Einstellung TRUE wird das Cookie nur gesetzt, wenn eine sichere Verbindung besteht. 🎜🎜Wenn diese Anforderung serverseitig erfüllt wird, müssen Programmierer solche Cookies nur über sichere Verbindungen senden. 🎜 | ||||||||||||||||
httponly td> | 🎜Auf TRUE gesetzt, kann auf das Cookie nur über das HTTP-Protokoll zugegriffen werden. 🎜🎜Das bedeutet, dass über Skriptsprachen wie JavaScript nicht auf Cookies zugegriffen werden kann. 🎜🎜Um Identitätsdiebstahl bei XSS-Angriffen effektiv zu reduzieren, wird die Verwendung dieser Einstellung empfohlen, allerdings ist diese Aussage oft umstritten. 🎜 |
返回值
如果在调用本函数以前就产生了输出,setcookie() 会调用失败并返回 FALSE。
如果 setcookie() 成功运行,返回 TRUE。
示例
<?php $value = 'something from somewhere'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); /* 1 小时过期 */ setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1); ?>
2、setrawcookie — 发送未经 URL 编码的 cookie
setrawcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
setrawcookie() 和 setcookie() 非常相似,唯一不同之处是发送到浏览器的 cookie 值没有自动经过 URL 编码(urlencode)。
六:PHP Cookie 简单示例
1、基本操作
<?php //添加Cookie setcookie('username', 'phpcn', time() + 3600); //获取Cookie $username = $_COOKIE['username']; //删除Cookie setcookie('username', '', time() - 3600); //修改Cookie setcookie('username', 'phpcn-updated', time() + 3600); ?>
2、面向过程封装
<?php /** * 获取 Cookie * @param string $name Cookie 名称 * @return mixed Cookie 值 */ function cookie_get($name) { return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null; } /** * 删除 Cookie * @param string $name Cookie 名称 */ function cookie_del($name) { setcookie($name, '', time() - 3600); } /** * 设置Cookie * @param string $name Cookie 名称 * @param mixed $value Cookie 值 * @param integer $expire Cookie 过期时间 * @param string $path Cookie 有效路径 * @param string $domian Cookie 有效域名/子域名 */ function cookie_set($name, $value, $expire = 3600, $path = '/', $domian = '') { setcookie($name, $value, time() + $expire); } /** * 检测 Cookie * @param string $name Cookie 名称 * @param boolean $has_empty 检测为空 * @return boolean */ function cookie_has($name) { return isset($_COOKIE[$name]); } ?>
3、面向对象封装
<?php class Cookie { const OPTION_EXPIRE = 'expire'; const OPTION_PATH = 'path'; const OPTION_DOMAIN = 'domain'; const OPTION_SECURE = 'secure'; const OPTION_HTTPONLY = 'httponly'; /** * Cookie 实例 * @var null */ private static $instance = null; /** * Cookie 选项 * @var array */ private $options = [ self::OPTION_EXPIRE => 3600, self::OPTION_PATH => '/', self::OPTION_DOMAIN => 'domain', self::OPTION_SECURE => false, self::OPTION_HTTPONLY => false ]; /** * Cookie constructor. * @param $options */ private function __construct($options) { $this->setOptions($options); } /** * privated __clone */ private function __clone() { } /** * 获取实例 * @param $options * @return Cookie|null */ public static function getInstance($options) { if (is_null(self::$instance)) { self::$instance = new self($options); } return self::$instance; } /** * 设置选项 * @param $name * @param $value */ public function setOption($name, $value) { if (isset($this->options[$name])) { $this->options[$name] = $value; } throw new InvalidArgumentException('Cookie option not exists:{$name}'); } /** * 设置多个选项 * @param $options */ public function setOptions($options) { foreach ($options as $name => $value) { $this->setOption($name, $value); } } /** * 设置 Cookie * @param $name * @param $value * @param array $options */ public function set($name, $value, $options = []) { $this->setOptions($options); if (is_array($value) || is_object($value)) { $value = json_encode($value); } setcookie( $name, $value, $this->options[self::OPTION_EXPIRE], $this->options[self::OPTION_PATH], $this->options[self::OPTION_DOMAIN], $this->options[self::OPTION_SECURE], $this->options[self::OPTION_HTTPONLY] ); } /** * 获取 Cookie * @param $name * @return array|mixed */ public function get($name) { $value = $_COOKIE[$name]; if (is_array($value)) { $arr=[]; foreach ($value as $k => $v) { $arr[$k] = substr($v, 0,1) == '{' ? json_decode($value) : $v; } return $arr; } else { return substr($value, 0,1) == '{' ? json_decode($value) : $value; } } /** * 删除 Cookie * @param $name * @param array $options */ public function del($name, $options = []) { $this->setOptions($options); $value = $_COOKIE[$name]; if ($value) { if (is_array($value)) { foreach ($value as $k => $v) { setcookie( $name . '[' . $k . ']', '', time() - 3600, $this->options[self::OPTION_EXPIRE], $this->options[self::OPTION_PATH], $this->options[self::OPTION_DOMAIN], $this->options[self::OPTION_SECURE], $this->options[self::OPTION_HTTPONLY] ); unset($v); } }else{ setcookie( $name, '', time() - 3600, $this->options[self::OPTION_EXPIRE], $this->options[self::OPTION_PATH], $this->options[self::OPTION_DOMAIN], $this->options[self::OPTION_SECURE], $this->options[self::OPTION_HTTPONLY] ); unset($value); } } } }
4、记住登录账号示例
<?php function cookie_get_username() { return isset($_COOKIE['username']) ? $_COOKIE['username'] : null; } function cookie_get_password() { return isset($_COOKIE['username']) ? $_COOKIE['username'] : null; } function cookie_get_remember() { return isset($_COOKIE['remember']) ? 'checked' : null; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = $_POST['username']; $password = $_POST['password']; if (isset($_POST['remember']) && $_POST['remember'] === '1') { setcookie('username', $username, time() + 3600); setcookie('password', $password, time() + 3600); setcookie('remember', '1', time() + 3600); } else { setcookie('username', '', time() - 3600); setcookie('password', '', time() - 3600); setcookie('remember', '', time() - 3600); } die('登录成功!'); } ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <form action="" method="post"> <table width="300" border="1" align="center" cellpadding="5" cellspacing="5"> <thead> <tr> <td colspan="2" align="center"><b>登录</b></td> </tr> </thead> <tr align="center"> <td>用 户 名</td> <td><input type="text" name="username" value="<?=cookie_get_username()?>"></td> </tr> <tr align="center"> <td>密码</td> <td><input type="password" name="password" value="<?=cookie_get_password()?>"></td> </tr> <tr align="center"> <td>记住账号</td> <td> <input type="checkbox" name="remember" value="1" <?=cookie_get_remember()?>> </td> </tr> <tr align="center"> <td colspan="2"><input type="submit" name="Submit" value="提交" /></td> </tr> </table> </form>
6. PHP会话控制:cookie和session区别与用法深入理解
9. JS读取PHP中设置的中文cookie时出现乱码怎么办
10. ThinkPHP6.0:Session和Cookie机制的变化
1. PHP中cookie怎么记录及删除变量?(图文+视频)
2. PHP cookie实现记录用户登陆信息的方法(图文+视频)