假设你正在实施会议。
您检查浏览器是否显示会话cookie。如果是,则验证cookie并找到与会话关联的用户,然后继续处理请求。
如果您没有找到会话cookie,则创建一个新会话并将cookie发送到您希望在后续请求中收到的浏览器。
现在我的问题是:如果您确实在请求中找到了会话Cookie,那么您是否重新发送响应中的相同Cookie。在什么情况下这是对的?
注意:我认为这是一个Pyramid(Python)程序员,因为Pyramid实现在每个响应上无条件地发送会话cookie。 (go to code)
答案 0 :(得分:8)
通常,您不需要在每个响应上设置cookie。浏览器已经有cookie,只要它仍然有效,它就会继续发送到服务器。
具体来说,每个请求都设置了一个Pyramid会话cookie,因为它包含一个签名和带时间戳的秘密,它可以与正常的cookie到期机制分开过期。每次Pyramid更新嵌入时间戳以显示会话仍然新鲜时,通过设置 new cookie。换句话说,cookie集每次都是不同的。
答案 1 :(得分:7)
对于会话 cookie(如,一个浏览器会话cookie,客户端将在关闭后立即销毁)我可能不会这样做。它没有特别实现任何东西,而且浪费带宽(虽然是少量)可以像这样继续重复。
>这里有一个cookie <谢谢!
>不,真的,有一个cookie <这不是同一个cookie吗? >说真的,有这个饼干 <请停下来。
只有在更改某些内容时再次发送cookie才有意义。因此,对于具有绝对到期时间的cookie,您可能希望每隔一段时间更新一次到期时间。显然,如果您要更改存储在cookie中的值,您还将再次发送标题。
我通常是PHP开发人员,PHP本地会话也是这样做的(每次无条件发送)。我想这样做的原因是:a)它更容易实现; b)它试图考虑不按预期行事的用户代理,可能忽略到期时间或未能将cookie写入客户端持久存储或<插入其他奇怪的行为在这里>。
如果每个人都正确地实现了2109/2965,那么绝对没有理由不止一次地设置语义相同的cookie。但如果人们真正阅读标准,开发人员的生活不会变得乏味吗?