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

假设您正在实施会话。

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

如果您没有找到会话cookie,那么您将创建一个新会话并向浏览器发送一个cookie,以期在随后的请求中收到该cookie。

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

注意:我问这是Pyramid(Python)程序员,因为Pyramid实现无条件地在每个响应中发送会话cookie。 (去代码)


通常,您无需在每个响应中设置Cookie。 浏览器已经有了cookie,只要它仍然有效,就会继续发送给服务器。

具体来说,每个请求上都会设置一个Pyramid会话cookie,因为它包含一个签名和时间戳的秘密,它可以与正常的cookie过期机制分开过期。 每当金字塔更新嵌入的时间戳以显示会话仍然新鲜时,通过设置新的cookie。 换句话说,cookie集合每次都是不同的。


对于会话cookie(如浏览器会话cookie中,客户端一旦关闭就会销毁),我可能不会这样做。 它并没有达到任何特别的效果,它会浪费带宽(尽管数量很少),不断重复自己的想法。

>这里有一个cookie。
<谢谢!
>没有,真的有一个饼干。
<这是不是同一个cookie?
>认真地,有这个饼干。
<请停下来。

只有在你改变一些事情时再发送cookie才有意义。 因此,对于绝对到期时间的cookie,您可能希望每隔一段时间更新一次到期时间。 显然,如果您要更改存储在cookie中的值,您还将再次发送标题。

我通常是一个PHP开发人员,而PHP本地会话也是这样做的(无条件地每次都发送它)。 我认为这样做的原因是:a)实现起来更容易,b)它试图说明用户代理行为不当,可能会忽略到期时间,或者无法将cookie写入客户端持久性存储或<插入其他奇怪行为在这里>。

如果每个人都正确实施了2109/2965,绝对没有理由多次设置语义相同的cookie。 但是如果人们真的阅读标准,开发人员的生活会不会变得沉闷?

链接地址: http://www.djcxy.com/p/71945.html

上一篇: Should a cookie header be set on every response?

下一篇: Sanitizing user's data in GET by PHP