PHP Session 和 Cookies 的区别

12 2025年6月 | 阅读6分钟

用户在不同网站上输入的数据可以使用 Cookie 和 Session 的组合来存储。它们非常重要,因为它们可以保存用户提供的数据以供多种用途。虽然 Session 保存在客户端和服务器上,但 Cookie 只保存在客户端计算机上。

了解 Cookie

Cookie 是存储在用户计算机上的一些小的文本文件,只能由用户的浏览器访问。单个 Cookie 的最大大小限制为 4 KB。除其他名称外,Cookie 有时也被称为互联网 Cookie、在线 Cookie 和 HTTP Cookie

当一个人第一次登录网站或应用程序时,大量数据会以 Cookie 的形式传输到他们的计算机。

这些 Cookie 会跟踪一个人访问网站时进行的所有浏览和活动。字符串类型用于保存数据。由于收集到的信息以易于阅读和理解的文本形式存储,因此 Cookie 收集的数据不安全。用户可以随时自由决定启用或禁用 Cookie。只有最初创建 Cookie 的用户才能看到其中包含的信息。

Cookie 是使用 HTTP 标头创建的,并在浏览器和服务器之间传输。Internet Explorer 将 Cookie 存储在临时 Internet 文件文件夹中,但 Cookie 的位置取决于浏览器。当我们搜索并播放 YouTube 上的特定歌曲时,Cookie 会检查生成的信息。然后,当我们再次打开 YouTube 时,会显示相同的歌曲或与之相似的推荐。

HTTP 是一种无状态协议,不将任何用户数据保存在其服务器上。Cookie 是实现此目的的有用工具。我们可以监控任何运行应用程序的状态并在用户 PC 上存储数据。

PHP 中的 Cookie 是什么?

PHP Cookie 是存储在客户端浏览器中的小型数据文件。在用户访问期间或后续网站访问期间,它们用于存储用户数据。为了在多个网页之间保留用户偏好和信息,Cookie 是 Web 开发的重要组成部分。

何时使用 Cookie?

我们可以在以下情况下使用 Cookie:

  • 您需要在访问之间保留用户设置或偏好(例如语言或主题选择)。
  • 您希望为分析或个性化(例如最近查看的产品)而监控用户活动。
  • 您希望使用“记住我”功能,以便在会话期间保持用户登录状态。
  • 您必须在用户浏览器中保存少量、非敏感数据(小于 4 KB)。

例如,存储用户的姓名或货币偏好,以便他们在返回网站时自动选择。

PHP 如何处理 Cookie?

设置 Cookie

PHP 的 setcookie() 方法用于设置 Cookie。此方法与 HTTP 标头一起,将 Cookie 从服务器传输到客户端浏览器。设置 Cookie 后,它将被添加到客户端每次向服务器发出的后续请求中。

语法

名称和值是唯一必需的参数;所有其他参数都是可选的。

检索 Cookie

已放置在客户端浏览器上的 Cookie 会立即包含在 PHP 的 $_COOKIE 超全局数组中。您可以使用 $_COOKIE['name'] 来访问它们。

呼气

可以配置 Cookie 的过期日期。如果未设置过期日期,则 Cookie 将在当前会话的有效期内(直到浏览器关闭)保持有效。

Session

数据在服务器上临时保存到多个网站,以用于会话。一个人花费在某个特定任务上的时间称为会话。此时间段从用户打开程序或网页开始,持续到用户关闭程序或计算机关闭为止。

当用户在浏览互联网应用程序时,Web 服务器不会识别用户,因为 HTTP 协议不会记录用户的状态。用户在应用程序主页或任何其他页面上输入的信息将不会传输到其他页面。为了克服游戏中的这种限制,通常使用会话。如果用户选择保留其数据,则可以将其存储在任何类型的会话变量中。为了防止未经授权的访问,会话变量存储的数据会在 服务器 上进行加密或转换为二进制格式。

当用户退出应用程序或关闭计算机时,会话值会自动删除。如果会话值需要长时间保留,则必须将其存储在数据库中。每个会话对单个用户都是唯一的,因为在单个程序中使用的会话数量没有限制。通过使用会话(一种存储在服务器上的唯一数字,形式为 cookie、表单字段或 URL),可以识别用户。

使用 Session ID(一种暂时存储在服务器上的唯一数字)来识别用户。

优点

Session 用于更安全地在服务器上存储数据,例如用户 ID,因此它们无法被更改。它阻止其他人篡改数据。

此外,Session 可以在网页之间以值的形式传输数据。对于不支持 Cookie 的 Web 浏览器,Session 是保存变量的一种更安全的方法。

PHP 中的 Session 是什么?

PHP Session 允许您存储(在 变量 中)可在其他页面上使用的数据。与 Cookie 不同,Session 数据存储在服务器上。同一应用程序中的所有页面都可以访问 Session 变量,这些变量存储有关单个用户的数据。

何时使用 Session?

我们可以在以下情况下使用 Session:

  • 在处理敏感用户数据时,例如登录凭据、用户角色或交易详细信息,使用 Session。
  • 在单个访问期间,您必须在多个页面上保留用户身份验证。
  • 您正在开发购物车系统或其他需要仅在用户主动使用时存储信息的用例。
  • 您需要为保存的数据提供更多保护和服务器端控制。

例如,在用户访问网站期间跟踪用户的 ID、权限或其购物车中的商品。

PHP Session 的工作原理

启动 Session

session_start() 函数用于启动 Session。首先,此函数检查是否已开始 Session,如果未开始,则会启动一个。通常,它会出现在您的 PHP 脚本的最前面。

数据存储

一旦 Session 开始,就可以在此 $_SESSION 超全局数组中存储和检索数据。

终止 Session

session_destroy() 可以终止 Session。此函数会删除存储在 $_SESSION 数组中的所有 Session 数据。

Session 与 Cookie 的区别

比较基础Cookies会话
定义Cookie 是浏览器存储的客户端数据文件,用于保留用户特定信息。Session 是服务器端机制,用于在用户浏览网站时临时存储与用户相关的数据。
初始化使用 Cookie 无需特殊函数即可开始,它们可以通过 HTTP 标头或脚本设置。需要调用 session_start() 来启动和管理 Session 变量。
存储位置由浏览器直接存储在用户的设备上。数据安全地存储在服务器上,对客户端隐藏。
过期Cookie 在开发者定义的预设持续时间后过期。关闭浏览器或用户注销时,Session 会自动过期。
数据格式通常以纯文本形式存储,如果不正确地保护,则容易受到攻击。以加密格式存储,提供更好的敏感信息保护。
容量在大多数浏览器中,每个 Cookie 的存储空间限制约为 4 KB可以存储大量数据;主要受服务器内存限制(例如,默认情况下每个 PHP 脚本为 128 MB)。
数据处理适用于存储少量非敏感数据,例如用户偏好或最近访问的页面。非常适合管理登录状态、购物车详细信息以及其他敏感或大型数据结构。
安全性由于位于客户端,因此更容易受到篡改或窃取。更安全,因为数据保留在服务器上,并且不会直接暴露给用户。

下一主题PHP 匿名函数