Ce sujet présente de manière exhaustive l'origine du cookie php, quels sont les attributs du cookie php, l'utilisation de la fonction de cookie php et les exemples d'application pratiques du cookie php à travers des images, des textes et des vidéos. ! Bienvenue aux étudiants du site Web php chinois pour apprendre !
1 : Que sont les cookies ?
Les cookies sont souvent utilisés pour identifier les utilisateurs.
Un cookie est un petit fichier qu'un serveur dépose sur l'ordinateur d'un utilisateur.
Chaque fois que le même ordinateur demande une page via un navigateur, le cookie sera envoyé à cet ordinateur.
Avec PHP, vous pouvez créer et récupérer des valeurs de cookies.
Recommandations de sujets connexes : session php
2 : La naissance de Cookie
Le protocole HTTP étant sans état, l'activité côté serveur doit être avec état.
L'objectif initial des cookies était de stocker des informations d'état sur le Web pour faciliter l'utilisation côté serveur.
Par exemple, déterminez si l'utilisateur visite le site Web pour la première fois. La dernière spécification est la RFC 6265, qui est une spécification implémentée par des serveurs de navigateur travaillant ensemble.
3 : Principe des Cookies
Lors de votre première visite sur le site , parcourir Le serveur envoie une demande. Une fois que le serveur a répondu à la demande, il placera le cookie dans la demande de réponse. Lorsque le navigateur enverra la demande pour la deuxième fois, il apportera le cookie et le serveur identifiera l'utilisateur. Bien entendu, le serveur peut également modifier le contenu des cookies.
4 : Attributs du cookie
Le cookie est un petit morceau de données textuelles n'excédant pas 4 Ko, composé d'un nom (Nom) , une valeur (Value) et plusieurs autres attributs facultatifs utilisés pour contrôler la période de validité des cookies, la sécurité et la portée d'utilisation.
Name | représente le nom du cookie. | ||||||||||||||
|
|||||||||||||||
Spécifie le site Web ou le domaine qui peut accéder au cookie. Le mécanisme des cookies ne suit pas la politique stricte de même origine, permettant à un sous-domaine de définir ou d'obtenir le cookie de son domaine parent. | |||||||||||||||
Définit le répertoire du site Web où le cookie est accessible. | |||||||||||||||
Quelle est la période de validité ? C'est l'attribut Expires dans le fichier ? photo. Navigation générale Les cookies du navigateur sont stockés par défaut. A la fermeture du navigateur et de la fin de la session, le cookie sera supprimé. | |||||||||||||||
Spécifiez s'il faut utiliser le protocole de sécurité HTTPS pour envoyer des cookies. L'utilisation du protocole de sécurité HTTPS peut protéger les cookies contre le vol et la falsification lors de la transmission entre le navigateur et le serveur Web. Cette méthode peut également être utilisée pour l'authentification de l'identité des sites Web, c'est-à-dire que lors de la phase d'établissement de la connexion HTTPS, le navigateur vérifiera la validité du certificat SSL du site Web. | |||||||||||||||
Utilisé pour empêcher les scripts clients d'accéder aux cookies via l'attribut document.cookie, utile Pour protéger les cookies contre le vol ou la falsification par des attaques de script intersite. |
5 : Fonction Cookie PHP
1. setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
setcookie() définit le cookie qui sera envoyé au client avec les en-têtes HTTP restants.
Paramètres
Paramètre | Description | nom | Nom du cookie. | ||||||||||||||
Valeur du cookie. Cette valeur est stockée sur l'ordinateur de l'utilisateur. Ne stockez pas d'informations sensibles. | |||||||||||||||||
Délai d'expiration des cookies.
|
|||||||||||||||||
Chemin de serveur valide du cookie. Lorsqu'il est défini sur '/', le cookie est valable pour l'ensemble du domaine du nom de domaine. S'il est défini sur '/foo/', le cookie n'est valable que pour le répertoire /foo/ et ses sous-répertoires dans le domaine. La valeur par défaut est le répertoire actuel lorsque le cookie est défini. | |||||||||||||||||
Nom de domaine/sous-domaine valide pour Cookie. est défini sur un nom de sous-domaine, ce qui rendra le cookie valide pour ce nom de sous-domaine et son nom de domaine de troisième niveau. Pour rendre le cookie valide pour l'ensemble du nom de domaine, il suffit de le définir sur le nom de domaine. | |||||||||||||||||
Définissez si ce cookie est uniquement transmis aux clients via des connexions HTTPS sécurisées fin. Lorsqu'il est défini sur TRUE, le cookie ne sera défini que lorsqu'une connexion sécurisée existe. Si cette exigence est gérée côté serveur, les programmeurs doivent envoyer ces cookies uniquement via des connexions sécurisées. | |||||||||||||||||
Défini sur TRUE, le cookie n'est accessible que via HTTP protocole. Cela signifie que les cookies ne sont pas accessibles via des langages de scripttels que JavaScript. Pour réduire efficacement le vol d'identité lors des attaques XSS, il est recommandé d'utiliser ce paramètre, mais cette affirmation est souvent controversée. |
返回值
如果在调用本函数以前就产生了输出,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实现记录用户登陆信息的方法(图文+视频)