Session 和 Cookies 的区别

Session 和 Cookie 之间的主要区别

  • Session 是包含用户信息的服务器端文件,而 Cookies 是包含用户信息的客户端文件。
  • Session依赖于Cookie,但是Cookie并不依赖于Session。
  • 当用户关闭浏览器时,会话结束,而 Cookie 的有效期则取决于您为其设置的有效期。
  • 你可以在Session中存储任意多的数据,但是Cookie中数据存储空间只有4KB。
  • 可以使用 Session_destroy() 命令销毁会话内的所有已注册数据。但是,没有 unsetcookie() 命令可以从 cookie 中删除数据。  

Session 和 Cookies 的区别
Session 和 Cookies 的区别

在这里,我分析了 Session 和 Cookie 并将综合评估其优缺点。

什么是会话?

会话是存储在服务器上的全局变量。每个会话都分配有一个唯一 ID,用于检索存储的值。每当创建会话时,包含唯一会话 ID 的 Cookie 都会存储在用户的计算机上,并随每个对服务器的请求一起返回。如果客户端浏览器不支持 Cookie,则 URL 中会显示唯一会话 ID。与 Cookie 相比,会话能够存储相对大量的数据。

浏览器关闭时,会话值会自动删除。如果要永久保存这些值,应将它们存储在 数据库.

就像 $_COOKIE 数组变量一样,会话变量存储在 $_SESSION 数组变量中。与 cookie 类似,会话必须在任何 HTML 标记之前启动。

为什么以及何时应该使用 Sessions?

会话用于将值从一个页面传递到另一个页面。它们将重要信息(例如用户 ID)更安全地存储在服务器上,恶意用户无法篡改。

当您想在不支持 Cookie 的浏览器上使用 Cookie 的替代方案时,也可以使用它来以高效且更安全的方式存储全局变量。这比在 URL 中传递它们更好,或者在开发诸如购物车之类的应用程序时,临时存储容量大于 4KB 的信息。

使用 PHP 创建会话

要开始会话,您需要启动 PHP 中的 session_start 函数,然后将您的值保存在 $_SESSION 超全局数组中。

假设您想要跟踪页面访问频率。利用会话是一种有效的方法。

以下示例说明如何建立和访问会话中的值:

<?php

session_start(); //start the PHP_session function 

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 的优点

从我的角度来看,本次会议的优点如下。

  • 通过在多个请求之间保持连续的对话状态来增强用户交互。
  • 通过临时存储用户数据来减少服务器负载。
  • 通过在有限时间内控制数据暴露来提高安全性。
  • 允许根据用户行为和偏好提供个性化体验。
  • 通过跟踪多个步骤来促进复杂的交易。
  • 通过最大限度地减少重新验证的需要来提高网站性能。
  • 通过有效地管理分布式系统上的用户会话来支持可扩展性。

Session 的缺点

根据我的经验,这些是使用会话的缺点。

  • 如果会话数据被拦截,则会增加数据泄露的风险。
  • 消耗服务器内存,可能会降低整体系统性能。
  • 如果管理不当,可能会导致不一致的用户体验。
  • 需要额外的服务器资源来维护和监控会话。
  • 会话过期可能会扰乱用户活动,导致用户沮丧。
  • 容易受到会话劫持和固定攻击。
  • 由于持久数据存储,它可能会使隐私法规的遵守变得复杂。

什么是cookie?

Cookie 是 Web 服务器存储在客户端计算机上的最大大小为 4KB 的小文件。设置 Cookie 后,随后的所有页面请求都会返回 Cookie 名称和值。只能从发出 Cookie 的域中读取 Cookie。例如,使用域 www.guru99.com 设置的 Cookie 无法从域 career.guru99.com 读取。互联网上的大多数网站都会显示来自其他域的元素,例如广告。提供这些元素的域也可以设置自己的 Cookie。这些称为第三方 Cookie。用户创建的 Cookie 只能对他们可见。其他用户无法看到其值。大多数 网页浏览器 有禁用 cookies、第三方 cookies 或两者的选项。

为什么以及何时应该使用 Cookies?

HTTP 是一种无状态协议;cookie 允许我们使用存储在用户计算机上的小文件来跟踪应用程序的状态。cookie 的存储路径取决于浏览器。Internet Explorer 通常将它们存储在 Temporal Internet Files 文件夹中。

个性化用户体验:这是通过允许用户选择他们的偏好来实现的。随后的页面请求将根据 cookie 中设置的偏好进行个性化。跟踪用户访问的页面。

使用 PHP 创建 Cookie

现在,让我们深入研究创建 cookie 所需的基本语法。

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

?>
  • 在 PHP 中,setcookie function 用于生成 cookie。“cookie_name”表示 cookie 的标识符,当服务器需要从 $_COOKIE 数组中获取 cookie 的值时,该标识符必不可少。此名称是必需的。
  • “cookie_value”表示cookie的内容,也是必需的。
  • “[expiry_time]” 参数是可选的,可以设置为指示 cookie 的使用寿命,例如将其设置为 1 小时后过期。这可以通过在 PHP time() 函数中增加或减去秒数来实现,例如,time() + 3600 设置为 1 小时。
  • “[cookie_path]” 是另一个可选参数,用于确定可访问 cookie 的服务器路径。使用正斜杠“/”表示 cookie 可在整个域中使用,而指定子目录则限制对这些子域的访问。
  • “[domain]” 参数也是可选的,用于确定 cookie 的访问位置。例如,将其设置为 www.cookiedomain.com 使其在整个域中可用,而 www.sub.cookiedomain.com 将其限制在该子域及其子子域中。请记住,只要域的总长度不超过 253 个字符,子域也可以拥有自己的子域。
  • “[secure]” 参数是可选的,默认设置为 false。它指定 cookie 是否应通过 HTTPS(如果为 true)或 HTTP(如果为 false)传输。
  • “[Httponly]” 设置也是可选的。设置为 true 时,客户端脚本语言无法访问 cookie,例如 JavaScript .

请注意: 在输出任何 HTML 标签之前必须调用 PHP setcookie 函数。

让我们考虑一个涉及 cookie 的实际例子。

在本例中,我们将开发一个简单的程序,将用户名存储在一个设置为十秒后过期的 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:

  • 增强风味探索的惊喜元素。
  • 提供简约的美感,适合现代品牌。
  • 减少包装混乱,将注意力集中在产品上。
  • 消除基于成分偏好或品牌认知的偏见。
  • 鼓励不带先入为主的观念进行品尝,从而获得公正的反馈。
  • 潜在地降低包装的印刷成本。
  • 简化标签法不太严格的市场的监管合规工作。

Cookie 的缺点

据我所知,这些是 cookie 的缺点。

  • 顾客无法识别过敏原或饮食限制。
  • 缺乏营养信息,这对于注重健康的消费者来说很重要。
  • 错失了突出独特或优质原料的机会。
  • 可能会造成货架上同类产品的混淆。
  • 阻碍品牌认知和忠诚度的建立。
  • 妨碍消费者做出明智的决策。
  • 这可能会在标签法严格的地区引发法律问题。

Session 与 Cookie:两者的区别

以下是我在实践中观察到的会话和 cookie 之间的重要区别:

Session 与 Cookie
Session 与 Cookie

时间
利用Cookies的

会话是包含用户信息的服务器端文件

Cookie 是包含用户信息的客户端文件

当用户关闭浏览器时会话结束

Cookie 的终止时间取决于您为其设置的生存期

In PHP,在使用 $_SESSION 之前,你必须编写 session_start(); 其他语言也一样

你不需要启动 cookie,因为它存储在你的本地机器中

在一个会话中,您可以存储任意数量的数据。唯一可以达到的限制是脚本一次可以消耗的最大内存,默认情况下为 128MB

官方最大 Cookie 大小为 4KB

会话依赖于 Cookie

Cookie 不依赖于 Session

Session_destroy() 用于销毁所有注册数据或取消设置一些

没有名为 unsetcookie() 的函数

结语

当数据安全性和容量要求超出 cookie 所能提供的范围时,我建议使用会话。但是,cookie 在易用性和实现轻量级、持久的用户状态跟踪方面是无与伦比的。