Request.Cookies和Response.Cookies的默认同步

时间:2013-02-11 13:17:25

标签: asp.net cookies request response duplication

当尝试操作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。

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

提前致谢...

1 个答案:

答案 0 :(得分:1)

Request和Response对象的Cookies属性是HttpCookieCollection的两个不同实例。但是,初始化Response对象时,将使用Response对象的引用创建HttpCookieCollection的实例。
对Response.Cookies.Add的调用将不仅通过Response.OnCookieAdd(cookie)向自我实例添加cookie,也将通过Response.OnCookieAdd(cookie)添加到Request.Cookies。 总的来说,您可能希望遵循从Request.Cookies中获取cookie的做法,并超时(删除浏览器上的cookie)或修改它,然后将其设置回Response。如果您只想添加cookie,请使用Add方法,否则使用Set确保只返回该名称的一个cookie。查看其他post