PHP Cookie的创建和获取(附带实例)
HTTP 是无状态的协议,当用户请求网站的 A 页面后再请求 B 页面时,HTTP 无法判断这两个请求来自同一个用户,这就意味着需要有一种机制能够跟踪记录用户在网站的活动,这种机制就是会话技术。
Cookie 和 Session 是常用的两种会话技术,本节将对 Cookie 进行详细讲解。
当用户第一次通过浏览器访问服务器时,服务器会向浏览器响应一些信息,这些信息都被保存在 Cookie 中。当用户使用浏览器再次访问服务器时,浏览器会将 Cookie 数据放在请求头中发送给服务器。服务器根据请求头中的 Cookie 数据判断该用户是否访问过,进而识别用户的身份。
为了更好地理解 Cookie,下面通过图 1 来演示 Cookie 在浏览器和服务器之间的传输过程。

图 1 Cookie的传输过程
当浏览器第一次请求服务器时,服务器会在响应数据中增加 Set-Cookie 头字段,将信息以 Cookie 的形式返回给浏览器;用户接收到服务器返回的 Cookie 信息后就会将它保存到浏览器中。当浏览器第二次访问该服务器时,会将信息以 Cookie 的形式发送给服务器,从而使服务器识别用户身份。
下面在 cookie.php 文件中使用 setcookie() 函数创建 Cookie,示例代码如下:
通过浏览器访问 cookie.php,查看设置 Cookie 后的响应头信息,具体如下图所示:

图 2 查看设置Cookie后的响应头信息
设置 Cookie 后,浏览器会根据响应头信息中的“Set-Cookie: name=value”保存 Cookie,如图 2 所示。
在开发者工具中可切换到“Cookies”标签页,查看保存的 Cookie 信息,如下图所示:

图 3 查看保存的Cookie信息
在图 3 中,可以看到已经设置的 Cookie 的名称(Name)、值(Value)、域名(Domain)、路径(Path)和有效期(Expires)等详细信息。
需要注意的是,当在 PHP 脚本中第一次使用 setcookie() 函数创建 Cookie 时,$_COOKIE 中没有 Cookie 数据,只有浏览器下次请求并携带 Cookie,才能通过 $_COOKIE 获取到 Cookie。
值得一提的是,超全局变量是系统预先设定好的变量,在脚本的全部作用域中都可以使用。
Cookie 和 Session 是常用的两种会话技术,本节将对 Cookie 进行详细讲解。
Cookie简介
Cookie 是服务器为了辨别用户身份而存储在用户本地终端(浏览器)上的数据。当用户第一次通过浏览器访问服务器时,服务器会向浏览器响应一些信息,这些信息都被保存在 Cookie 中。当用户使用浏览器再次访问服务器时,浏览器会将 Cookie 数据放在请求头中发送给服务器。服务器根据请求头中的 Cookie 数据判断该用户是否访问过,进而识别用户的身份。
为了更好地理解 Cookie,下面通过图 1 来演示 Cookie 在浏览器和服务器之间的传输过程。

图 1 Cookie的传输过程
当浏览器第一次请求服务器时,服务器会在响应数据中增加 Set-Cookie 头字段,将信息以 Cookie 的形式返回给浏览器;用户接收到服务器返回的 Cookie 信息后就会将它保存到浏览器中。当浏览器第二次访问该服务器时,会将信息以 Cookie 的形式发送给服务器,从而使服务器识别用户身份。
Cookie的基本使用方法
Cookie 的基本使用方法包括创建 Cookie 和获取 Cookie,下面进行讲解。1) PHP创建Cookie
使用 setcookie() 函数创建 Cookie 的基本语法格式如下:bool setcookie( string $name, // Cookie的名称(必须) string $value = '', // Cookie的值(可选) int $expire = 0, // Cookie的有效期(可选) string $path = '', // Cookie在服务器端的路径(可选) string $domain = '', // Cookie的有效域名(可选) bool $secure = false, // 指定是否通过安全的HTTPS连接传输Cookie(可选) bool $httponly = false // 指定Cookie只能通过HTTP和HTTPS访问(可选) )
下面在 cookie.php 文件中使用 setcookie() 函数创建 Cookie,示例代码如下:
<?php setcookie('name', 'value');
通过浏览器访问 cookie.php,查看设置 Cookie 后的响应头信息,具体如下图所示:

图 2 查看设置Cookie后的响应头信息
设置 Cookie 后,浏览器会根据响应头信息中的“Set-Cookie: name=value”保存 Cookie,如图 2 所示。
在开发者工具中可切换到“Cookies”标签页,查看保存的 Cookie 信息,如下图所示:

图 3 查看保存的Cookie信息
在图 3 中,可以看到已经设置的 Cookie 的名称(Name)、值(Value)、域名(Domain)、路径(Path)和有效期(Expires)等详细信息。
2) PHP获取Cookie
使用超全局变量 $_COOKIE 可以获取 Cookie。在 Cookie.php 中获取 Cookie 的示例代码如下:var_dump($_COOKIE); // 输出结果:array(1) { ["name"]=> string(5) "value" }从上述代码可以看出,使用 $_COOKIE 可以直接获取 Cookie 中存储的内容。
需要注意的是,当在 PHP 脚本中第一次使用 setcookie() 函数创建 Cookie 时,$_COOKIE 中没有 Cookie 数据,只有浏览器下次请求并携带 Cookie,才能通过 $_COOKIE 获取到 Cookie。
值得一提的是,超全局变量是系统预先设定好的变量,在脚本的全部作用域中都可以使用。
使用Cookie存储多个值或数组
在 Cookie 名称后添加“[]”用于存储多个值或数组,示例代码如下:setcookie('user[name]', 'tom'); setcookie('user[age]', 30); var_dump($_COOKIE); // 输出结果:array(2) { ["user"]=> array(2) { ["name"]=> string(3) "tom" ["age"]=> string(2) "30" } }