4.2.1 Cookie

Cookie 是一种在客户端存储数据并用这些数据来跟踪和识别用户的机制。
Cookie 在 Web 服务器端产生,并以文本文件的形式存储在了客户端电脑的硬盘上。
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成
Cookie的作用:
HTTP协议本身是无状态的。
什么是无状态呢,即服务器无法判断用户身份。
Cookie实际上是一小段的文本信息(key-value格式)。
客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。
客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
服务器检查该Cookie,以此来辨认用户状态。
打个比方,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息。当你下次再来这个银行时,银行机器能识别你的卡,从而能够直接办理业务。
Cookie 通常用于以下几个方面:
1)记录用户信息,如上次登陆的用户名等。
2)页面之间传递参数。
3)将HTML页面存储在 Cookie 中,提高页面浏览速度。
4)实现记录用户个人信息的功能
注意:
Cookie是不可以跨域名的,隐私安全机制禁止网站非法获取其他网站的Cookie。
比如: 淘宝的 cookie 信息, 京东是不能使用的,也不允许获取.

4.2.2 创建Cookie

setcookie(string $name, string $value = “”, array $options = []): bool
setcookie() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。 和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。 请在产生任何输出之前(包括 和 或者空格)调用本函数。
一旦设置 Cookie 后,下次打开页面时可以使用 $_COOKIE 读取。 Cookie 值同样也存在于 $_REQUEST。
常见创建 Cookie 的语法格式,有以下两种:

创建 Cookie 语法格式一:

bool setcookie(名称 , 值)
注意:Cookie 会在会话结束(浏览器整体关闭)时失效。

  1. header("content-type:text/html;charset=utf-8");
  2. // 设置多个Cookie 信息
  3. setcookie("username","tom");
  4. setcookie("passwd","123");
  5. setcookie("address","beijing");
  6. echo "设置Cookie成功";

查看 Cookie 信息,可以在浏览器地址栏前面的 叹号中查看

创建 Cookie 语法格式二:

bool setcookie(名称 , 值 , 有效期)
注意:Cookie 会在有效期过后失效。

header("content-type:text/html;charset=utf-8");
// 设置多个Cookie 信息
setcookie("username","tom", time()+60);
setcookie("passwd","123", time()+60);
setcookie("address","beijing", time()+60);

echo "设置Cookie成功";

4.2.3 读取Cookie

PHP 提供了全局变量 $_COOKIE 来读取 Cookie 的值。
读取Cookie语法格式:
$变量 = $_COOKIE[“名称”]

$username = $_COOKIE["username"];
$passwd = $_COOKIE["passwd"];
$address = $_COOKIE["address"];

echo "Cookie 信息如下 :<br>";
echo "username:" . $username . "<br>";
echo "passwd:" . $passwd . "<br>";
echo "address:" . $address . "<br>";

通过 HTTP Cookies 方式传递给当前脚本的变量的数组。用法和 $_GET, $_POST 等全局变法相同。

<?php
header("content-type:text/html;charset=utf-8");

setcookie("userName","张小明",time()+3600);

if(isset($_COOKIE["userName"])){
    $name = $_COOKIE["userName"];
    echo $name;
}
else{
    echo "Cookie还未创建";
}

image.png

4.2.4 删除Cookie

没有设置有效期的 Cookie,在浏览器整体关闭时,就会自动删除。设置了有效期的 Cookie,在过了有效期之后,也会自动删除。
如果我们想提前删除 Cookie 中的值,可以通过 setcookie() 函数,重新将指定的 Cookie 值设置为空值。
setcookie(“userName”,””);

<?php
header("content-type:text/html;charset=utf-8");

setcookie("userName","张小明",time()+3600);

setcookie("userName","");

if(isset($_COOKIE["userName"])){
    $name = $_COOKIE["userName"];
    echo $name;
}
else{
    echo "Cookie还未创建";
}

image.png