是否应该在每个响应中设置cookie标头?

时间:2013-03-15 12:15:43

标签: python http session pyramid

假设你正在实施会议。

您检查浏览器是否显示会话cookie。如果是,则验证cookie并找到与会话关联的用户,然后继续处理请求。

如果您没有找到会话cookie,则创建一个新会话并将cookie发送到您希望在后续请求中收到的浏览器。

现在我的问题是:如果您确实在请求中找到了会话Cookie,那么您是否重新发送响应中的相同Cookie。在什么情况下这是对的?

注意:我认为这是一个Pyramid(Python)程序员,因为Pyramid实现在每个响应上无条件地发送会话cookie。 (go to code

2 个答案:

答案 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。但如果人们真正阅读标准,开发人员的生活不会变得乏味吗?