几个月前我开始使用PHP。为了为我的网站创建登录系统,我阅读了有关cookie和会话及其差异的信息(cookie存储在用户的浏览器和服务器上的会话中)。那时候,我更喜欢饼干(谁不喜欢饼干?!)并且只是说:“谁在乎?我没有任何好处将它存储在我的服务器中”,所以,我继续使用cookies我的学士毕业设计。然而,在完成我的应用程序的重要部分之后,我听说对于存储用户ID的特定情况,会话更合适。所以我开始考虑如果陪审团问我为什么用饼干代替会话,我会怎么说?我有这个原因(我不需要存储有关用户的内部信息)。那是否足够?还是不止于此?
您能否告诉我使用cookies保存用户ID的优缺点?
感谢StackOverflow中的所有人!
答案 0 :(得分:199)
该概念是为Web访问者存储跨页面加载的持久数据。 Cookie将其直接存储在客户端上。会话使用cookie作为排序的关键,以与存储在服务器端的数据相关联。
最好使用会话,因为实际值是从客户端隐藏的,您可以控制数据何时到期并变为无效。如果它全部基于cookie,则用户(或黑客)可以操纵他们的cookie数据,然后向您的站点播放请求。
编辑:除了简单性之外,我认为使用cookie没有任何好处。以这种方式看待它......用户是否有任何理由知道他们的ID#?通常我会说不,用户不需要这些信息。提供信息应限于需要知道的基础。如果用户将其Cookie更改为具有不同的ID,您的应用程序将如何响应该怎么办?这是一个安全风险。
在会议风靡之前,我基本上都有自己的实现。我在客户端上存储了一个唯一的cookie值,并将我的持久数据与该cookie值一起存储在数据库中。然后在页面请求中,我匹配这些值并拥有我的持久数据,而不让客户端控制那是什么。
答案 1 :(得分:108)
区分这两者的基本思路。
<强>会话强>
<强>饼干:强>
当您需要存储短期信息/值时,首选会话,例如计算,测量,查询等变量。
当您需要存储长期信息/值(例如用户帐户)时,首选Cookie(因此,即使他们关闭计算机2天,他们的帐户仍会登录)。我想不出很多关于cookie的例子,因为在大多数情况下都没有采用它。
答案 2 :(得分:40)
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,
COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS
这是您选择的主要区别,
如果您想长时间记住身份证,那么您需要使用cookies;否则,如果您只是希望网站能够识别此次访问的用户,那么会话即可。
会话存储在php服务器将生成的文件中。要记住哪个文件是针对哪个用户,php还会在用户的浏览器上设置一个cookie来保存这个会话文件ID,这样在下次访问时,php会读取该文件并重新加载会话。
现在,php默认会在每个时间间隔清除会话,并且会话的命名约定使其自动过期。此外,一旦浏览器关闭或历史记录被清除,浏览器将不会保留包含会话ID的cookie。
值得注意的是,现在浏览器还支持另一种存储引擎,例如LocalStorage,SessionStorage和其他webdb引擎,javascript代码可以使用这些引擎将数据保存到您的计算机上以便记住您。例如,如果你在Facebook中打开javascript控制台,并输入“localStorage”,你将看到Facebook用来记住你的所有变量而没有cookie。
答案 3 :(得分:19)
当您将#ID保存为Cookie以识别登录用户时,实际上您正在向与其无关的用户显示数据。此外,如果第三方尝试在其浏览器中将随机ID设置为cookie数据,他们将能够说服服务器他们是用户,而实际上并非如此。那是缺乏安全感。
您已经使用过Cookie,正如您所说,您已经完成了大部分项目。除了cookie有特权保留很长时间,而会话结束更快。因此会话不适用于这种情况。实际上,许多着名且受欢迎的网站和服务都使用cookie,您可以长时间保持登录状态。但是,如何使用他们的方法创建更安全的登录过程?
这里的想法是:您可以帮助您使用Cookie的方式:如果您使用随机密钥而不是ID来识别登录用户,首先,您不会将主要数据泄露给随机用户,其次,如果您考虑Random键足够大,任何人都难以猜测一个键或创建一个随机键。例如,您可以在用户的浏览器中保存这样的40长度键: “KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn” 并且任何人都不太可能创建确切的密钥并伪装成其他人。
答案 4 :(得分:12)
实际上,会话和cookie并不总是分开的。通常,但并非总是如此,会话使用cookie。
在这些其他问题中,您的问题有一些很好的答案。由于您的问题专门是关于保存用户的IDU(或ID),我不认为这与其他问题完全重复,但他们的答案应该对您有帮助。
答案 5 :(得分:8)
我个人同时使用cookies和会话。
Cookie仅在用户点击“记住我”复选框时使用。此外,服务器上的Cookie 已加密且数据仅已解密。如果有人试图编辑cookie,我们的解密器就能检测到它并拒绝请求。
我见过很多网站,其中登录信息存储在Cookie中,任何人只需将用户在Cookie中的ID和用户名更改为访问任何人的帐户。
谢谢,
答案 6 :(得分:5)
按优先级排序的规则:
会话使用cookie!。会话数据存储在服务器端,而UID存储在客户端的cookie中。它允许服务器将给定的用户与正确的会话数据匹配。 UID受保护且很难被黑客入侵,但并非无懈可击。对于敏感操作(更改电子邮件或重置密码),请不要依赖会话,也不要使用Cookie:请要求用户密码以确认操作。
敏感数据绝不应存储在Cookie中(电子邮件,加密的密码,个人数据...)。请记住,数据存储在外部计算机上,如果该计算机不是私人计算机(教室或公共计算机),则其他人可能会读取Cookie内容。
记住我数据必须存储在cookie中,否则当用户关闭浏览器时数据将丢失。但是,请勿将密码或用户个人数据保存在“记住我” cookie中。将用户数据存储在数据库中,并将此数据与存储在Cookie中的一对ID /密钥加密在一起。
在考虑了先前的要求之后,以下问题终于可以帮助您在Cookie和会话之间进行选择:
用户关闭浏览器时是否必须保留持久性数据?
答案 7 :(得分:2)
会话和Cookie不一样。
会话用于存储来自网页的信息。通常,网页没有任何记忆来存储这些信息。但使用我们可以保存必要的信息。
但Cookie用于识别用户。使用cookie我们可以存储数据。它是存储在用户Web浏览器中的一小部分数据。因此,每当用户浏览下次浏览器时,将cookie数据信息发送回服务器以获取先前的活动。
答案 8 :(得分:2)
+--------------------------------------------------+---------------------------------+------------------------------------------------------------+
| Criteria / factors | Sessions | Cookies |
+--------------------------------------------------+---------------------------------+------------------------------------------------------------+
| Epoch (start of existence) | Created BEFORE an HTTP response | Created AFTER an HTTP response |
| Availability during the first HTTP request | YES | NO |
| Availability during the succeeding HTTP requests | YES | YES |
| Ultimate control for the data and expiration | Server administrator | End-user |
| Default expiration | Expires earlier than cookies | Lasts longer than sessions |
| Server costs | Memory | Memory |
| Network costs | None | Unnecessary extra bits |
| Browser costs | None | Memory |
| Security | Difficult to hijack | Easy to hijack |
| Deprecation | None | Now discouraged in favor of the JavaScript "Web Storage" |
+--------------------------------------------------+---------------------------------+------------------------------------------------------------+
优点和缺点是主观的。它们可能导致二分法(对某些人来说是优点,但对另一些人来说则是缺点)。相反,我在上面列出了可以帮助您决定选择哪个因素的因素。
让我们说您是一个服务器端人员,希望同时处理会话和cookie。第一次HTTP握手将像这样:
在步骤1中,浏览器不知道会话和cookie的内容。 在第4步中,服务器可以设置会话和cookie的值。
比方说,在一个网页中,您正在加载example.com
托管的20个资源,这20个资源将携带有关cookie的额外信息。即使只是对CSS或JPG图像的资源请求,它仍会在前往服务器的方式的标头中携带cookie。对JPG资源的HTTP请求是否应该包含一堆不必要的Cookie?
无法替代会话。但是there are many other options是在浏览器而不是old school cookies中存储数据。
会话对于存储用户数据更为安全,因为最终用户无法修改会话,而只能在服务器端进行设置。 Cookies on the other hand can be hijacked,因为它们只是存储在浏览器中。
答案 9 :(得分:1)
会话允许您像使用cookie一样存储单个信息,但数据存储在服务器而不是客户端。
答案 10 :(得分:0)
正如其他人所说,Sessions很聪明,更有利于隐藏客户信息。
但Cookie仍然至少具有一个优势,您可以从Javascript访问Cookie(例如ngCookies)。使用PHP会话,您无法在PHP脚本之外的任何地方访问它。
答案 11 :(得分:0)
我将选择Session,首先会话更安全然后cookie,cookies是客户端站点数据,会话是服务器站点数据。 Cookie用于标识用户,因为它是使用用户计算机浏览器嵌入我的服务器的一小段代码。另一方面,Session帮助您保护身份,因为Web服务器不知道您是谁,因为HTTP地址在GET和POST方法的帮助下将状态192.168.0.1更改为765487cf34ert8ded ...或其他数字。会话将用户的数据存储在甚至用户ID无法彼此匹配的唯一ID会话中。会话在单个应用程序的所有页面中存储单个用户信息。 Cookie过期是在setcookies()的帮助下设置的,而会话过期未设置,当用户关闭浏览器时会过期。
答案 12 :(得分:0)
会话是服务器上与cookie信息相关联的一组信息。如果您使用的是PHP,则可以检查会话。保存_路径位置,并实际上“查看会话”。 Cookie是发送给客户端和从客户端返回的数据的片段。 Cookies通常用于促进会话,因为它告诉服务器哪个客户端处理了哪个会话。还有其他方法可以做到这一点(查询字符串魔术等),但是cookie可能是最常见的方法。
答案 13 :(得分:0)
Cookie和会话用于存储信息。 Cookie仅存储在客户端计算机上,而会话存储在客户端和服务器上。
会话
会话在服务器上的临时目录中创建一个文件,该目录中存储了已注册的会话变量及其值。在访问期间,该数据将可用于网站上的所有页面。
当用户关闭浏览器或离开网站后,会话结束,服务器将在预定的时间段(通常为30分钟)后终止会话。
饼干
Cookie是存储在客户端计算机上的文本文件,并且保留使用跟踪的目的。服务器脚本将一组cookie发送到浏览器。例如名称,年龄或标识号等。浏览器将此信息存储在本地计算机上,以备将来使用。
下次浏览器向Web服务器发送任何请求时,浏览器将这些cookie信息发送至服务器,服务器使用该信息来识别用户。
答案 14 :(得分:0)
Session 和 Cookie 之间的主要区别在于 Session 数据存储在服务器上,而 Cookies em> 在访问者的浏览器中存储数据。
Sessions 比 Cookies 更安全,因为它存储在服务器中。
存储在 Cookie 中的数据可以存储数月或数年,具体取决于 Cookie 的寿命。但是当关闭网页浏览器时,Session 中的数据就会丢失。