会话Cookie与持久Cookie

4
我理解持久cookie和会话cookie的正常应用。但如果您可以指定会话cookie的过期时间以像持久cookie一样运作,反之亦然,使用会话cookie除了它们被用户混淆和会话存储在服务器上之外,还有什么好处吗?
函数session_set_cookie_params()允许您为会话设置特定的过期时间。您可以在setcookie()函数中为持久cookie设置时间。
我已经查看了线程Cookie VS SessionSession cookies and persistent cookies,但没有找到我的答案。

session_set_cookie_params()函数允许您为会话设置特定的过期时间” - 不,它不是这样的。它允许您指定存储会话ID的cookie应该有效的时间长度 - 但这与实际的“会话生命周期”不同。 - CBroe
1个回答

5
但是,如果您可以指定会话cookie的过期时间来像持久cookie一样运行,反之亦然,则不成立。一个会话cookie在定义上不能具有过期时间,因此,它与持久cookie的区别在于是否给定了expires值。
除了被用户混淆和会话存储在服务器上外,使用会话cookie还有什么好处吗?例如,PHP会话的会话ID可以存储在会话cookie或持久cookie中,并且会话cookie可以包含除会话ID之外的其他信息。它们都使用“会话”这个词,但是它们是不同的东西。
如果您希望cookie在用户关闭浏览器时消失,则会话cookie是正确的选择。一个很好的例子是在线银行业务-验证您的cookie应该在您关闭浏览器时被销毁,以便别人无法潜入您的计算机,重新打开浏览器并开始转账。您曾经遇到过由于恶作剧而更改了Facebook状态或类似内容的情况吗?

阅读session_set_cookie_params()的文档并亲自测试它。你完全可以指定一个过期时间,而不仅仅是在浏览器关闭时。 - White Lotus
这使它成为一个“持久性cookie”,保存“会话ID”,术语有点混淆,不是吗? - mzulch
我不会称其为“持久化cookie”,因为它是存储在服务器上的。 - White Lotus
仍然困惑于会话和cookie。 会话数据存储在服务器上,可以是文件,数据库,或redis等形式。而Cookie包含一个ID,用于识别会话并告知服务器使用哪一组会话数据。 - mzulch
实际上,您可以使用session_name函数指定会话名称,并使用session_id指定值。这就回到了我所说的,我已经知道它存储在服务器上。我正在尝试弄清楚会话cookie是否有其他好处。从我的理解来看,会话cookie和持久cookie几乎可以互相模拟,除了会话cookie的服务器方面。 - White Lotus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接