会话 Cookie 与持久性 Cookie

Posted

技术标签:

【中文标题】会话 Cookie 与持久性 Cookie【英文标题】:Session Cookie vs Persistent Cookie 【发布时间】:2016-04-24 13:40:18 【问题描述】:

我了解持久性 cookie 与会话 cookie 的正常应用。但是,如果您可以指定会话 cookie 的到期时间,使其表现得像持久性 cookie,反之亦然。除了对用户进行模糊处理并且会话存储在服务器上之外,使用会话 cookie 有什么好处吗?

session_set_cookie_params() 函数允许您为会话设置特定的到期时间。您可以在 setcookie() 函数中的持久性 cookie 中设置时间。

我已经把话题拉出来了 Cookie VS Session 和 Session cookies and persistent cookies,并没有找到我的答案。

【问题讨论】:

session_set_cookie_params() 函数允许您为会话设置特定的到期时间” – 不,它没有。它允许您指定存储会话 ID 的 cookie 的有效期 - 但这与实际的“会话生命周期”不同。 【参考方案1】:

但是如果你可以指定一个会话 cookie 的过期时间来 表现得像一个持久性 cookie,反之亦然。

不正确,会话 cookie 和持久性 cookie 之间的区别在于是否给出了 expires 值。根据定义,会话 cookie 不能有过期时间。

除了使用会话 cookie 之外,还有什么好处吗? 从用户混淆,会话存储在服务器上?

类似 php 会话的会话 ID 可以存储在会话 cookie 或持久性 cookie 中,会话 cookie 可以包含会话 ID 之外的其他信息。它们都使用“会话”一词,但它们是不同的东西。

如果您希望 cookie 在用户关闭浏览器时消失,那么会话 cookie 是正确的选择。一个很好的例子是网上银行——当你关闭浏览器时,验证你的 cookie 应该被销毁,这样别人就不能潜入你的电脑,重新打开浏览器,然后开始转账。曾经因为恶作剧而改变过您的 Facebook 状态或类似情况?

【讨论】:

阅读session_set_cookie_params() 的文档并亲自测试一下。除了浏览器关闭时,您完全可以指定过期时间。 这使它成为一个持有“会话 ID”的“持久性 cookie”,术语混乱,是吧? 我不会称它为“持久 cookie”,因为它存储在服务器上。 仍然混淆会话和 cookie。会话数据以文件或数据库或 redis 等形式存储在服务器上。cookie 包含一个标识服务器会话的 ID,因此它知道要使用哪组会话数据。 其实可以使用函数session_name函数指定会话名称,使用session_id指定值。这可以追溯到我所说的我已经知道它存储在服务器上。我试图弄清楚会话 cookie 是否还有其他好处。从我得到的会话 cookie 和持久 cookie 几乎可以互相模仿,除了会话 cookie 的服务器方面。

以上是关于会话 Cookie 与持久性 Cookie的主要内容,如果未能解决你的问题,请参考以下文章

关于Cookie的知识的总结

为啥不使用长寿命会话 ID 来代替带有令牌的持久 cookie?

cookies不设置过期时间默认是永远不过期吗

Redis PHP 会话不持久

Python爬虫知识点——Session与Cookie

cookie和session那些事