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

在这里,我分析了 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 之间的重要区别:
会话是包含用户信息的服务器端文件 |
Cookie 是包含用户信息的客户端文件 |
当用户关闭浏览器时会话结束 |
Cookie 的终止时间取决于您为其设置的生存期 |
In PHP,在使用 $_SESSION 之前,你必须编写 session_start(); 其他语言也一样 |
你不需要启动 cookie,因为它存储在你的本地机器中 |
在一个会话中,您可以存储任意数量的数据。唯一可以达到的限制是脚本一次可以消耗的最大内存,默认情况下为 128MB |
官方最大 Cookie 大小为 4KB |
会话依赖于 Cookie |
Cookie 不依赖于 Session |
Session_destroy() 用于销毁所有注册数据或取消设置一些 |
没有名为 unsetcookie() 的函数 |
结语
当数据安全性和容量要求超出 cookie 所能提供的范围时,我建议使用会话。但是,cookie 在易用性和实现轻量级、持久的用户状态跟踪方面是无与伦比的。