更新的 Cookie 不适用于 Response.Redirect

Posted

技术标签:

【中文标题】更新的 Cookie 不适用于 Response.Redirect【英文标题】:Updated Cookie not working on Response.Redirect 【发布时间】:2018-07-19 22:09:32 【问题描述】:

我正在更新cookie如下

if (Request.Cookies["SSOPortalUser"] == null)
                
                    HttpCookie myCookieSSOPortalUser = new HttpCookie("SSOPortalUser");
                    // Set the cookie value.
                    myCookieSSOPortalUser.Value = currentUser.UserLogin.ToString();

                    // Add the cookie.
                    Response.Cookies.Add(myCookieSSOPortalUser);
                
                else
                
                    Request.Cookies["SSOPortalUser"].Value = currentUser.UserLogin.ToString();
                

但是在我重定向到另一个页面后,浏览器中没有更新

Response.Redirect(AppSettings.Instance.AppRoot + "OperationSelection.aspx");

在 operationSelection 页面中,我试图访问 cookie,它显示了之前的值。

lbluser.Text = Request.Cookies["SSOPortalUser"].Value

【问题讨论】:

Request.Cookies["SSOPortalUser"].Value 的初始值是什么我的意思是当检查评估为不为空时,您分配了一些值,对吗?但是分配前的价值是什么 如果请求中存在cookie,您正在更改请求cookie的值,这没有效果,因为您需要设置响应cookie来更新它。 另外,在重定向期间设置 cookie 是一个棘手的问题:***.com/questions/5366635/… @RacilHilan 在“else”分支(如果请求附加了 cookie,则输入)OP 更新请求 cookie 值。这没有任何用处,因为要更新客户端上的 cookie 值,需要将新的 cookie(具有新值)附加到响应中。由于 OP 说“它显示了以前的值”,我怀疑这是问题所在(因为这意味着已经存在 cookie,因此使用了“else”分支)。 @Evk 你只需要说你的评论提到了else 分支:)。由于某种原因,我忽略了它。奇怪的是,OP 的做法与 if 分支不同。当然,您的评论是正确的,+1。感谢您的友好解释。 【参考方案1】:

在 cmets 中发现的问题是由于错误假设更新请求 cookie 值(在else 分支中)会以某种方式更新客户端上的 cookie 值。事实并非如此,因为要更新客户端上的 cookie,您需要将另一个具有相同名称(和不同值)的 cookie 附加到响应中。更新请求 cookie 没有任何用处(只是更新表示请求 cookie 的内存结构的值)。

【讨论】:

以上是关于更新的 Cookie 不适用于 Response.Redirect的主要内容,如果未能解决你的问题,请参考以下文章

Request.Cookies和Response.Cookies

Response.Write 不适用于生产 [重复]

内置对象综合

webform(内置对象)

webform-内置对象

Webform(内置对象-Response与RedirectQueryString传值Repeater删改)