PHP 会话和 PHP Cookies 示例
⚡ 智能摘要
PHP 中的 Cookie 和 Session 都用于在无状态的 HTTP 协议中维护状态,但它们存储数据的方式不同。本教程将解释 Cookie 如何在客户端保存小文件,Session 如何在服务器端保存数据,以及如何通过实际代码创建、读取和销毁它们。
什么是 Cookie?
Cookie 是一个最大大小为 4KB 的小文件,由 Web 服务器存储在客户端计算机上。
一旦设置了 cookie,随后的所有页面请求都会返回 cookie 名称和值。
只能从发出该 cookie 的域读取 cookie。例如,使用域 www.guru99.com 设置的 cookie 无法从域 .guru99 读取。 职业生涯.guru99.com.
互联网上的大多数网站都会显示来自其他域的元素,例如广告。提供这些元素的域也可以设置自己的 cookie。这些被称为第三方 cookie。
用户创建的 Cookie 只有用户自己可见,其他用户无法看到其值。
大多数网络浏览器都提供了禁用 Cookie、第三方 Cookie 或两者都禁用的选项。
如果情况属实,那么 PHP 会通过传递 cookie 令牌来做出响应。 URL.
下图说明了 cookie 的工作原理。
在这里,
1) 用户请求访问一个存储 Cookie 的页面
2)服务器在用户计算机上设置 cookie
3)用户的其他页面请求将返回Cookie名称和值
为何以及何时使用 Cookies?
- HTTP 是一种无状态协议;Cookie 使我们能够 track 是应用程序使用存储在用户计算机上的小型文件来记录其状态的工具。Cookie 的存储路径取决于浏览器。Internet Explorer 通常将它们存储在“临时 Internet 文件”文件夹中。
- 个性化用户体验——这是通过允许用户选择他们的偏好来实现的。后续的页面请求将根据 Cookie 中设置的偏好进行个性化处理。
- Tracking 用户访问的页面
创建 Cookie
现在让我们来看一下创建 cookie 的基本语法。
<?php setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]); ?>
这里,
- “setcookie”是 PHP功能 用于创建 cookie。
- “cookie_name”是服务器从$_COOKIE数组变量中检索cookie值时将使用的名称。它是必填项。
- “cookie_value”是cookie的值,它是必填项。
- “[expiry_time]”是可选的;它可以用来设置 cookie 的过期时间,例如 1 小时。该时间是通过 PHP time() 函数加上或减去大于 0 的秒数来设置的,例如 time() + 3600 表示 1 小时。
- “[cookie_path]” 是可选的;它可用于设置服务器上的 cookie 路径。正斜杠“/”表示 cookie 将在整个域上可用。子目录将 cookie 访问限制在子域中。
- “[domain]”是可选的;它可以用来定义 cookie 访问层级,例如
www.cookiedomain.com指整个领域,而www.sub.cookiedomain.com限制 cookie 访问www.sub.cookiedomain.com及其子域。 - “[secure]”是可选的,默认值为false。它用于确定cookie是通过HTTPS发送(如果设置为true),还是通过HTTP发送(如果设置为false)。
- “[httponly]”是可选的。如果设置为true,则客户端脚本语言(例如httponly)将仅允许httponly。 JavaScript 无法访问 cookie。
注意: PHP 的 setcookie 函数必须在 HTML 开始标签之前执行。
现在让我们来看一个使用 cookie 的例子。
我们将创建一个基本程序,允许我们将用户名存储在 60 秒后过期的 cookie 中。
下面的代码展示了上述示例“cookies.php”的实现。
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
输出:
the cookie has been set for 60 seconds
检索 Cookie 值
使用以下代码创建另一个名为“cookies_read.php”的文件。
<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>
输出:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
注意:$_COOKIE 是 PHP 内置的超全局变量。它包含所有已设置 cookie 的名称和值。
浏览器对 cookie 的数量和大小有限制,通常每个域大约 50 个 cookie,每个 cookie 大约 4KB。
正在测试我们的应用程序。假设您已将 PHP 文件保存在 phptuts 文件夹中。
- 第一步——打开你的网络浏览器并输入 URL http://localhost/phptuts/cookies_read.php
注意:仅显示了一个空数组
- 步骤 2 – 浏览至 URL http://localhost/phptuts/cookies.php
- 步骤 3 – 切换回第一个标签页,然后点击刷新按钮
稍等片刻,然后再次点击刷新按钮。结果如何?
删除cookies
- 如果您想在 cookie 过期之前销毁它,那么您可以将过期时间设置为已经过去的时间。
- 创建一个名为 cookie_destroy.php 的新文件,并添加以下代码
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- 重复上述检索 cookie 值部分中的步骤 1 至 3。
- 打开 URL http://localhost/phptuts/cookie_destroy.php
- 切换到 URL http://localhost/phptuts/cookies_read.php它显示什么结果?
什么是会话?
- 会话是存储在服务器上的全局变量。
- 每个会话都分配有一个唯一的 ID,用于检索存储的值。
- 每次创建会话时,都会在用户计算机上存储一个包含唯一会话 ID 的 cookie,并在每次向服务器发送请求时将该 cookie 返回。如果客户端浏览器不支持 cookie,则会在浏览器中显示唯一的 PHP 会话 ID。 URL.
- 与 Cookie 相比,会话能够存储相对较大的数据。
- 会话值会在浏览器关闭时自动删除。如果要永久保存这些值,则应将其存储在数据库中。
- 和 $_COOKIE 数组变量一样,会话变量也存储在 $_SESSION 数组变量中。和 cookies 一样,会话必须在任何 HTML 标记之前启动。
为什么以及何时使用 Sessions?
- 您希望将用户 ID 等重要信息更安全地存储在服务器上,以防止恶意用户篡改。
- 您想将值从一个页面传递到另一个页面。
- 您需要一种在不支持 Cookie 的浏览器上使用的 Cookie 替代方案。
- 您希望以比直接传递全局变量更高效、更安全的方式存储它们。 URL.
- 你正在开发ping 类似商店的应用程序ping 需要临时存储容量大于 4KB 的信息的购物车。
创建会话
要创建会话,必须先调用 PHP session_start 函数,然后将值存储在 $_SESSION 数组变量中。
假设我们想知道某个页面被加载了多少次。我们可以使用会话来实现这一点。
以下代码展示了如何创建会话和从会话中检索值。
<?php session_start(); // start the session if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
输出:
You are visitor number 1
销毁会话变量
session_destroy() 函数用于销毁整个 PHP 会话。
如果只想销毁单个会话项,可以使用 unset() 函数。
下面的代码说明了如何使用这两种方法。
<?php
session_destroy(); // destroy entire session
?>
<?php unset($_SESSION['product']); // destroy product session item ?>
session_destroy 会删除所有会话数据,包括与会话关联的 cookie。
unset 操作只会释放各个会话变量,其他数据保持不变。





