1

当尝试操作 Response.Cookies 和/或 Request.Cookies 中的 cookie 集合时,任何人都可以澄清我在 .NET 4.0 Web 应用程序中遇到的行为。尽管我努力寻找文档或论坛帖子以明确确认 Request.Cookies 和 Response.Cookies 的预期默认行为,但我始终无法找到明确的答案,现在我遇到了需要的情况!

我的确切问题是: * Request.Cookies 和 Response.Cookies 肯定应该被认为是完全独立的集合,还是它们实际上代表同一个集合的两个不同“视图”?

  • Request.Cookies 和 Response.Cookies 之间的“关系”中内置了多大程度的同步。除了添加到 Response.Cookies 的 cookie 在 Request.Cookies 中立即可见(我知道因为它已记录在案)之外,我是否应该默认期望两个集合中的所有其他 cookie 始终相同额外的自动同步?

  • 如果有一些同步,它是瞬时的,还是全部在生命周期的某个特定阶段处理?

  • 如果有一些同步,是否有可能,甚至是可取的,以避免它发生?

  • 处理来自以前陈旧浏览器请求的重复 cookie 的最佳方法是什么?目前,我这样做的努力没有成功,因为我对 Response.Cookies 所做的任何更改都会立即包含在 Request.Cookies 中(再次出现预期的行为),但是......一些隐含的“幻影”过程发生了具有再次同步集合的结果 - 换句话说,我能找到的唯一可能结果是我的 Response.Cookies 集合没有重复 cookie 的副本,或者返回到两个重复 cookie 的原始状态。

显然从最后一个问题来看,我显然误解了这两个集合的默认行为。这就是为什么任何应该发生的事情的澄清都会非常感激地收到!

提前致谢 ...

4

1 回答 1

1

Request 和 Response 对象的 Cookies 属性是HttpCookieCollection的两个不同实例。但是,在初始化 Response 对象时,会使用 Response 对象的引用创建 HttpCookieCollection 的实例。
对 Response.Cookies.Add 的调用不仅会添加一个 cookie,还会通过 Response.OnCookieAdd(cookie) 向 Request.Cookies 添加一个 cookie。
总体而言,您需要遵循从 Request.Cookies 中获取 cookie 并超时(删除浏览器上的 cookie)或修改它然后将其设置回 Response 的做法。如果您只想添加 cookie,则使用 Add 方法,否则使用 Set 确保只返回一个同名的 cookie。请参阅另一篇文章

于 2013-04-26T19:27:42.807 回答