在下一个请求之前更改 cookie 不会影响它 - 如何解决这个问题?
Changing a cookie doesn't affect it until the next Request - how to fix this?
我熟悉 Microsoft 的 "best practices" 来处理 cookie 的生命周期(如 MSDN 上所定义),并且正在关注这些,但发现了一个我需要修复的奇怪场景。我无法想象我是第一个体验到这一点的人,所以想看看社区对此有何看法。
顺便说一句,对于我将要描述的内容,一个明显的解决方法是强制重定向,但由于我不会深入探讨的原因,302 不是一个选项。
好的,我收到了一个 WebRequest,其中我有一个特定的 cookie。根据流程,我需要 "remove" 这个 cookie。为此,我将 Response Cookie 的值设置为 null,并将其到期日期设置为去年的某个时间。
但是,稍后,代码的一个非常独立的部分尝试重新读取 cookie 并且 - 猜猜是什么 - 它找到了旧值。 注意:这仍然是 SAME 网络请求的一部分,我们尚未return发送给客户端。
当我们return到客户的浏览器时,cookie 被正式删除。
我的一个解决方案是,在网络请求的最开始,我将请求 cookie 复制到一个单独的 NameValueCollection 中。
- 每次更新 cookie 值时,我都会更新 Response.Cookies 集合中的 cookie,并更新单独的 NameValueCollection 中的值。
- 每次删除 cookie 时,我都会使 Response.Cookies 集合中的 cookie 过期,然后将其从 NameValueCollection
中删除
- 每次添加新 cookie 时,我都会将其添加到 Response.Cookies 集合和我的 NameValueCollection 中。
- 每当我想读取 cookie 的值时,我都会从我的 NameValueCollection 中读取它。
想法?
谢谢
格里夫
我首先检查 Resonse.Cookies.AnyKeys 是否包含我的 Cookie 名称。如果是,那么我从响应 cookie 中读取。如果没有,那么我会从请求 cookie 中读取。
我熟悉 Microsoft 的 "best practices" 来处理 cookie 的生命周期(如 MSDN 上所定义),并且正在关注这些,但发现了一个我需要修复的奇怪场景。我无法想象我是第一个体验到这一点的人,所以想看看社区对此有何看法。
顺便说一句,对于我将要描述的内容,一个明显的解决方法是强制重定向,但由于我不会深入探讨的原因,302 不是一个选项。
好的,我收到了一个 WebRequest,其中我有一个特定的 cookie。根据流程,我需要 "remove" 这个 cookie。为此,我将 Response Cookie 的值设置为 null,并将其到期日期设置为去年的某个时间。
但是,稍后,代码的一个非常独立的部分尝试重新读取 cookie 并且 - 猜猜是什么 - 它找到了旧值。 注意:这仍然是 SAME 网络请求的一部分,我们尚未return发送给客户端。
当我们return到客户的浏览器时,cookie 被正式删除。
我的一个解决方案是,在网络请求的最开始,我将请求 cookie 复制到一个单独的 NameValueCollection 中。
- 每次更新 cookie 值时,我都会更新 Response.Cookies 集合中的 cookie,并更新单独的 NameValueCollection 中的值。
- 每次删除 cookie 时,我都会使 Response.Cookies 集合中的 cookie 过期,然后将其从 NameValueCollection 中删除
- 每次添加新 cookie 时,我都会将其添加到 Response.Cookies 集合和我的 NameValueCollection 中。
- 每当我想读取 cookie 的值时,我都会从我的 NameValueCollection 中读取它。
想法?
谢谢
格里夫
我首先检查 Resonse.Cookies.AnyKeys 是否包含我的 Cookie 名称。如果是,那么我从响应 cookie 中读取。如果没有,那么我会从请求 cookie 中读取。