Session 与 Cookies 的区别| Session 和 Cookies 的区别

17 Mar 2025 | 6 分钟阅读

Session 和 Cookies 都被不同的网站用于在站点不同页面之间存储用户数据。Session 和 Cookies 都很重要,因为它们会跟踪访问者提供的信息以用于不同目的。两者之间的主要区别在于,Session 保存在服务器端,而 Cookies 保存在用户浏览器或客户端。除此之外,两者之间还有许多其他差异。在本主题中,我们将详细了解 Session 和 Cookies,以及它们之间的区别。

Session vs. Cookies

什么是 Session?

  • Session 用于临时在服务器上存储信息,以便在网站的多个页面之间使用。它是用于活动的总时间。用户 Session 在登录特定网络应用程序时开始,在用户退出应用程序或关闭系统时结束。
  • 当我们通过互联网处理应用程序时,Web 服务器不知道用户,因为 HTTP 协议不维护状态。用户在一个应用程序页面(例如主页)上提供的信息不会传递到另一个页面。为了消除此限制,可以使用 Session。当访问者第一次进入网站时,Session 就会启动。
  • 用户信息存储在 Session 变量中,这些变量可以存储任何类型的值或对象的任何数据类型。
  • Session 值更加安全,因为它们以二进制形式或加密形式存储,并且只能在服务器上解密。当用户关闭系统或退出应用程序时,Session 值会自动删除。要永久存储值,我们需要将它们存储在数据库中。
  • 每个 Session 对每个用户都是唯一的,并且应用程序可以使用任意数量的 Session,没有限制。
  • 用户通过 **sessionID** 来识别,这是一个保存在服务器内的唯一数字。它被保存为 **cookie、表单字段或 URL**。

Session 的工作原理

可以使用下图来理解 Session 的工作原理

Session vs. Cookies
  1. 在第一步中,客户端通过 GET 或 POST 方法向服务器发出请求。
  2. 在服务器上创建 **sessionID**,并将其保存在数据库中。它将 sessionId 与 cookie 一起作为响应返回给客户端。
  3. 存储在浏览器中的带 sessionID 的 Cookie 被发送回服务器。服务器将此 ID 与保存的 sessionID 进行匹配,并发送 **HTTP200** 响应。

为什么使用 Session?

  • Session 用于在服务器上更安全地存储 UserID 等信息,使其无法被篡改。
  • 它还可以将信息以值的形式从一个网页传输到另一个网页。
  • 它可以作为 Cookies 的替代方案,用于不支持 Cookies 的浏览器,以更安全的方式存储变量。

什么是 Cookie?

  • Cookie 是存储在用户计算机上的一个小型文本文件。Cookie 的最大文件大小为 **4KB**。它也被称为 HTTP Cookie、Web Cookie 或 Internet Cookie。每当用户第一次访问网站时,该网站就会以 Cookie 的形式将数据包发送到用户的计算机。
  • 当用户访问其站点时,Cookies 会帮助网站跟踪用户的浏览历史或购物车信息。
  • 它只存储“字符串”数据类型。
  • 存储在 Cookie 中的信息不安全,因为这些信息以文本格式存储在客户端,任何人都可以读取。
  • 我们可以根据需要启用或禁用 Cookies。
  • 用户生成的 Cookie 只能显示给他们,其他用户无法看到这些 Cookie。
  • Cookies 通过 HTTP 标头在服务器和浏览器之间创建和共享。
  • Cookie 保存的路径由浏览器决定,例如 Internet Explorer 通常将其存储在 **临时 Internet 文件文件夹** 中。
  • 当我们访问 YouTube 频道并搜索一些歌曲时,下次当我们再次访问 YouTube 时,Cookies 会读取我们的浏览历史,并显示相似的歌曲或上次播放的歌曲。

使用 PHP 创建 Cookie

要在 PHP 中创建 Cookie,我们需要使用 **setcookie**() 函数,并且它必须出现在 <html> 标签之前。该函数的语法如下:

语法:

示例:

setcookie("Userid", "1005", "time()+3600");

Cookies 属性

  • 名称: 定义 Cookie 的名称。
  • 值: 定义 Cookie 的值。
  • 过期: 指定 Cookie 何时过期。如果未使用或设置为 0,则 Cookie 将在会话结束时删除。
  • 路径: 定义 Cookie 的服务器路径。如果设置为“/”,则 Cookie 在整个域内可用
  • 域名: 定义 Cookie 的域名。如果我们设置为“javatpoint.com”,它将可用于 javatpoint.com 的所有子域。
  • 安全: 指定 Cookie 是否仅通过 HTTPS 传输。如果设置为 True,则表示 Cookie 仅为安全连接设置。
  • HTTPOnly:如果设置为 TRUE,则只能通过 HTTP 协议访问 Cookie。

为什么使用 Cookies?

HTTP 是一个无状态协议,因此不存储任何用户信息。为此,我们可以使用 Cookies。它允许我们在用户计算机上存储信息并跟踪应用程序的状态。

Session 和 Cookies 的主要区别

  • Session 是服务器端文件,用于存储用户信息,而 Cookies 是客户端文件,包含用户在本地计算机上的信息。
  • Session 依赖于 Cookies,而 Cookies 不依赖于 Session。
  • 当用户关闭浏览器或退出应用程序时,Session 结束,而 Cookies 在设定的时间过期。
  • Session 可以存储用户想要的任意数据,而 Cookies 的大小限制为 4KB。

Cookies 和 Session 的区别表

SessionCookies
Session 将变量及其值存储在服务器上临时目录中的文件中。Cookies 以文本文件的形式存储在用户计算机上。
当用户退出应用程序或关闭其 Web 浏览器时,Session 结束。Cookies 在用户设置的生命周期内结束。
它可以存储无限量的数据。它只能存储有限的数据。
我们可以在 Session 中存储任意数量的数据,但脚本一次可以使用的最大内存限制为 128MB。浏览器 Cookie 的最大尺寸为 4KB。
我们需要调用 session_start() 函数来启动 Session。我们不需要调用函数来启动 Cookie,因为它存储在本地计算机中。
在 PHP 中,要设置 Session 数据,会使用 $_SESSION 全局变量。在 PHP 中,要从 Cookies 获取数据,会使用 $_COOKIE 全局变量。
在 PHP 中,要销毁或删除 Session 中存储的数据,我们可以使用 session_destroy() 函数,要取消设置特定变量,我们可以使用 unset() 函数。我们可以设置一个过期日期来删除 Cookie 的数据。它会在那个特定时间自动删除数据。没有特定的函数来删除数据。
Session 比 Cookies 更安全,因为它们以加密形式保存数据。Cookies 不安全,因为数据以文本文件形式存储,如果任何未经授权的用户访问了我们的系统,他都可以篡改数据。

结论

通过以上讨论,我们可以更好地理解 Cookies 和 Session 以及它们之间的区别。因此,我们可以得出结论,Session 是一种在服务器端临时存储用户信息的方式,而 Cookies 在过期之前将信息存储在用户计算机上。


下一主题区别