几个月前我开始使用 PHP。为了为我的网站创建登录系统,我阅读了 cookie 和会话及其差异(cookie 存储在用户的浏览器和服务器上的会话)。那时,我更喜欢 cookie(谁不喜欢 cookie?!),只是说:“谁在乎呢?我没有任何好的协议将它存储在我的服务器中”,所以,我继续使用 cookie我的本科毕业设计。但是,在完成我的应用程序的大部分之后,我听说对于存储用户 ID 的特殊情况,会话更合适。所以我开始思考,如果陪审团问我为什么使用 cookie 而不是会话,我会说什么?我有这个原因(我不需要在内部存储有关用户的信息)。这足以作为一个理由吗?还是不止于此?您能告诉我使用 cookie 保存用户 ID 的优点/缺点吗?
感谢 StackOverflow 中的所有人!
这个概念是为 Web 访问者跨页面加载存储持久数据。 Cookies 将其直接存储在客户端上。会话使用 cookie 作为排序键,与存储在服务器端的数据相关联。
最好使用会话,因为实际值对客户端是隐藏的,并且您可以控制数据何时过期并变为无效。如果这一切都基于 cookie,则用户(或黑客)可以操纵他们的 cookie 数据,然后向您的站点发出请求。
编辑:除了简单之外,我认为使用 cookie 没有任何优势。这样看……用户有什么理由知道他们的ID#吗?通常我会说不,用户不需要这些信息。提供信息应限制在需要知道的基础上。如果用户将他的 cookie 更改为具有不同的 ID,您的应用程序将如何响应?这是一个安全风险。
在会议风靡一时之前,我基本上有自己的实现。我在客户端上存储了一个唯一的 cookie 值,并将我的持久数据与该 cookie 值一起存储在数据库中。然后在页面请求中,我匹配了这些值并拥有我的持久数据,而不让客户控制那是什么。
区分这两者的基本思想。
会议:
UID存储在服务器(即服务器端)更安全(因为1)过期不能设置,用户关闭浏览器时会话变量会过期。 (现在它在 php 中默认存储 24 分钟)
饼干:
UID 存储在网络浏览器(即客户端)上 不是很安全,因为黑客可以访问并获取您的信息(因为 1)可以设置过期时间(请参阅 setcookies() 了解更多信息)
当您需要存储短期信息/值时,首选会话,例如用于计算、测量、查询等的变量。
当您需要存储长期信息/值时首选 Cookies,例如用户的帐户(这样即使他们关闭计算机 2 天,他们的帐户仍然会登录)。我想不出很多关于 cookie 的例子,因为它在大多数情况下都没有被采用。
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,
COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS
这是您选择的主要区别,
如果你想让 id 被长时间记住,那么你需要使用 cookie;否则,如果您只想让网站识别此访问的用户,那么会话就是要走的路。
会话存储在您的 php 服务器将生成的文件中。为了记住哪个文件是给哪个用户的,php 还将在用户的浏览器上设置一个 cookie 来保存这个会话文件 id,以便在他们下次访问时 php 将读取这个文件并重新加载会话。
现在 php 默认每隔一段时间清除会话,并且会话的命名约定使其自动过期。此外,一旦浏览器关闭或历史记录被清除,浏览器将不会保留保存会话 ID 的 cookie。
需要注意的是,现在的浏览器还支持另一种存储引擎,例如 LocalStorage、SessionStorage 和其他 webdb 引擎,javascript 代码可以使用这些引擎将数据保存到您的计算机以记住您。例如,如果您在 Facebook 中打开 javascript 控制台并输入“localStorage”,您将看到 Facebook 使用的所有变量来记住您,而无需使用 cookie。
简短的回答
按优先级排序的规则:
规则 1. 永远不要相信用户输入:cookies 不安全。对敏感数据使用会话。
规则 2. 如果用户关闭浏览器时必须保留持久性数据,请使用 cookie。
规则 3. 如果用户关闭浏览器时不需要保留持久性数据,请使用会话。
规则 4. 阅读详细答案!
来源:https://www.lucidar.me/en/web-dev/sessions-or-cookies/
详细解答
饼干
Cookie 存储在客户端(在访问者的浏览器中)。
Cookie 不安全:读取和写入 cookie 内容非常容易。
使用 cookie 时,您必须根据欧洲法律 (GDPR) 通知访问者。
可以设置过期时间,但用户或浏览器可以更改它。
用户(或浏览器)可以(设置为)拒绝使用 cookie。
会话
会话存储在服务器端。
会话使用 cookie(见下文)。
会话比 cookie 更安全,但并非无懈可击。
过期在服务器配置中设置(例如 php.ini)。
默认过期时间为 24 分钟或浏览器关闭时。
用户刷新或加载新页面时会重置过期时间。
用户(或浏览器)可以(设置为)拒绝使用 cookie,因此拒绝会话。
从法律上讲,您还必须通知访问者获取 cookie,但尚不清楚缺乏先例。
合适的选择
会话使用 cookie!会话数据存储在服务器端,但 UID 存储在客户端的 cookie 中。它允许服务器将给定的用户与正确的会话数据相匹配。 UID 受到保护且难以破解,但并非无懈可击。对于敏感操作(更改电子邮件或重置密码),不要依赖会话和 cookie:要求用户密码以确认操作。
敏感数据绝不应存储在 cookie 中(电子邮件、加密密码、个人数据......)。请记住,数据存储在外国计算机上,如果计算机不是私人计算机(教室或公共计算机),其他人可能会读取 cookie 内容。
记住我的数据必须存储在 cookie 中,否则当用户关闭浏览器时数据将丢失。但是,不要在“记住我”cookie 中保存密码或用户个人数据。将用户数据存储在数据库中,并将此数据与存储在 cookie 中的一对加密的 ID / 密钥链接起来。
在考虑了前面的建议之后,以下问题最终可以帮助您在 cookie 和会话之间进行选择:
用户关闭浏览器时必须保留持久数据吗?
如果答案是肯定的,请使用 cookie。
如果答案是否定的,请使用会话。
当您将 #ID 保存为 cookie 以识别登录用户时,您实际上是在向与他们无关的用户显示数据。此外,如果第三方试图在他们的浏览器中将随机 ID 设置为 cookie 数据,他们将能够让服务器相信他们是用户,而实际上他们不是。那是缺乏安全感。
您使用了 cookie,并且正如您所说,您已经完成了大部分项目。此外 cookie 具有保留很长时间的特权,而会话结束得更快。所以会话在这种情况下不适合。实际上,许多著名和流行的网站和服务都使用 cookie,您可以长时间保持登录状态。但是您如何使用他们的方法来创建更安全的登录过程呢?
这里的想法是:你可以帮助你使用 cookie 的方式:如果你使用随机密钥而不是 ID 来识别登录用户,首先,你不会将你的主要数据泄露给随机用户,其次,如果你考虑随机密钥足够大,任何人都很难猜测密钥或创建随机密钥。例如,您可以在用户的浏览器中保存一个 40 长度的密钥:“KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn”,任何人都不太可能创建确切的密钥并假装是其他人。
实际上,会话和 cookie 并不总是分开的。通常,但并非总是,会话使用 cookie。
在这些其他问题中,您的问题有一些很好的答案。由于您的问题专门关于保存用户的 IDU(或 ID),我认为这与其他问题并不完全重复,但他们的答案应该对您有所帮助。
What is the difference between a Session and a Cookie?
TL;博士
标准/因素 会话 Cookie 时期(存在开始) 在 HTTP 响应之前创建 在 HTTP 响应之后创建 在第一个 HTTP 请求期间的可用性 是 否 在后续 HTTP 请求期间的可用性 是 是 最终控制数据和到期 服务器管理员 最终用户 默认过期时间早于 cookie 持续时间长于会话 服务器成本 内存 内存 网络成本 无 不必要的额外字节 浏览器成本 无 内存安全 难以劫持 易于劫持 弃用 无 现在不鼓励使用 JavaScript “Web Storage”
细节
优点和缺点是主观的。它们可能导致二分法(对某些人来说是优势,但对其他人来说是劣势)。相反,我在上面列出了可以帮助您决定选择哪一个的因素。
在第一个 HTTP 请求和响应期间存在
假设您是一个想要同时处理会话和 cookie 的服务器端人员。第一次 HTTP 握手将如下所示:
浏览器准备 HTTP 请求 -- SESSIONS: 不可用; COOKIES:不可用浏览器发送HTTP请求服务器接收HTTP请求服务器处理HTTP请求--SESSIONS:存在; COOKIES: cast 服务器发送 HTTP 响应 浏览器接收 HTTP 响应 浏览器处理 HTTP 响应 -- SESSIONS: 不可用;饼干:存在
在第 1 步中,浏览器不知道会话和 cookie 的内容。在第 4 步中,服务器可以有机会设置会话和 cookie 的值。
后续 HTTP 请求和响应期间的可用性
浏览器准备 HTTP 请求 -- SESSIONS: 不可用; COOKIES:可用浏览器发送HTTP请求服务器接收HTTP请求服务器处理HTTP请求--SESSIONS:可用; COOKIES:可用 服务器发送 HTTP 响应 浏览器接收 HTTP 响应 浏览器处理 HTTP 响应 -- SESSIONS:不可用;饼干:可用
有效载荷
假设您在一个网页中加载由 example.com
托管的 20 个资源,这 20 个资源将携带有关 cookie 的额外字节信息。即使它只是对 CSS 或 JPG 图像的资源请求,它仍然会在到达服务器的途中在其标头中携带 cookie。对 JPG 资源的 HTTP 请求是否应该携带一堆不必要的 cookie?
弃用
会话没有替代品。对于 cookie,there are many other options 在浏览器中存储数据而不是 old school cookies。
存储用户数据
Session 存储用户数据更安全,因为它不能被最终用户修改,只能在服务器端设置。 Cookies on the other hand can be hijacked 因为它们只是存储在浏览器中。
我个人同时使用 cookie 和会话。
仅当用户单击“记住我”复选框时才使用 Cookie。并且cookies是加密的,数据只在服务器上解密。如果有人试图编辑 cookie,我们的解密器能够检测到它并拒绝该请求。
我见过很多网站将登录信息存储在 cookie 中,任何人都可以简单地更改 cookie 中的用户 ID 和用户名来访问任何帐户。
谢谢,
会话允许您像使用 cookie 一样存储单个信息,但数据存储在服务器而不是客户端上。
Session 和 Cookie 是不一样的。
会话用于存储来自网页的信息。通常网页没有任何记忆来存储这些信息。但是使用我们可以保存必要的信息。
但是Cookie是用来识别用户的。使用 cookie 我们可以存储数据。它是存储在用户网络浏览器中的一小部分数据。因此,每当用户下次浏览时,浏览器都会将 cookie 数据信息发送回服务器以获取以前的活动。
我会选择 Session,首先 session 比 cookies 更安全,cookies 是客户端站点数据, session 是服务器站点数据。 Cookies 用于识别用户,因为它是嵌入我的服务器和用户计算机浏览器的一小段代码。另一方面,Session 可以帮助您保护您的身份,因为 Web 服务器不知道您是谁,因为 HTTP 地址将状态 192.168.0.1 更改为 765487cf34ert8ded…..或借助 GET 和 POST 方法的其他数字。 Session 将用户的数据存储在唯一 ID 会话中,即使用户 ID 也无法相互匹配。 Session 将单个用户信息存储在一个应用程序的所有页面中。 Cookies expires 是在 setcookies() 的帮助下设置的,而 session expires 没有设置,它在用户关闭浏览器时过期。
Cookie 和会话用于存储信息。 Cookie 仅存储在客户端计算机上,而会话存储在客户端和服务器上。
会议
会话在服务器上的临时目录中创建一个文件,其中存储了已注册的会话变量及其值。在访问期间,该数据将可供网站上的所有页面使用。
会话在用户关闭浏览器或离开站点后结束,服务器将在预定时间后终止会话,通常为 30 分钟。
饼干
Cookie 是存储在客户端计算机上的文本文件,用于跟踪使用情况。服务器脚本向浏览器发送一组 cookie。例如姓名、年龄或身份证号等。浏览器将此信息存储在本地机器上以供将来使用。
当下次浏览器向 Web 服务器发送任何请求时,它会将这些 cookie 信息发送到服务器,服务器使用该信息来识别用户。
Session 和 Cookie 的主要区别在于 Session 数据存储在服务器上,而 Cookie 将数据存储在访问者的浏览器中。
会话比 Cookie 更安全,因为它存储在服务器中。
存储在 Cookie 中的数据可以存储数月或数年,具体取决于 Cookie 的寿命。但是当浏览器关闭时,Session 中的数据会丢失。
正如其他人所说,Sessions 很聪明,并且在向客户隐藏信息方面更有优势。
但是 Cookie 至少还有一个优势,您可以通过 Javascript(例如 ngCookies)访问您的 Cookie。使用 PHP 会话,您无法在 PHP 脚本之外的任何地方访问它。
会话是与 cookie 信息相关联的服务器上的一组信息。如果您使用的是 PHP,您可以检查会话。保存_路径位置并实际“查看会话”。 cookie 是发送给客户端和从客户端返回的数据片段。 Cookies 通常用于促进会话,因为它告诉服务器哪个客户端处理了哪个会话。还有其他方法可以做到这一点(查询字符串魔术等),但 cookie 可能是最常见的。
不定期副业成功案例分享
session_write_close();
。滚动您自己的唯一 ID 并与普通 cookie 匹配并没有那么困难,并使所有页面保持美观和活泼。