asp.net中的cookie问题。值在response.redirect之后恢复

时间:2012-03-14 19:01:36

标签: asp.net cookies response.redirect httpcookie

我花了太多时间在这上面是疯了。

我有一个包含“setcookie”功能的页面基类,基本上就是这样:

        Dim context As HttpContext = System.Web.HttpContext.Current

        If context.Request.Cookies(cookieName) Is Nothing Then
            Dim cookie As HttpCookie
            cookie.Value = cookieValue
            cookie.Expires = DateTime.Now.AddDays(7)
            context.Response.Cookies.Add(cookie)
        Else
            Dim cookie As HttpCookie = context.Request.Cookies(cookieName)
            cookie.Expires = DateTime.Now.AddDays(7)
            cookie.Value = cookieValue
        End If

此函数由简单的aspx页面调用。由于这是在测试环境中,我正在使用的cookie中存在先前的值“123”。如果我使用调试和监视窗口,我会看到值成功更改为“168”。

我在一行上有一个调试断点:

           Response.Redirect("overview.aspx", False)

当断点处于活动状态时,监视窗口中的值为:

    currProjectID   168 Integer
    HttpContext.Current.Request.Cookies("currProjectID").Value  "168"   String

(currProjectID是基页类中的一个属性,它使用上面的函数获取/设置cookie)

现在,第二个我使用“F10”断开上面的断点线,变量的值发生变化!

    HttpContext.Current.Request.Cookies("currProjectID").Value  "123"   String
    currProjectID   123 Integer

这太疯狂了!代码无处可去,调试点立即位于上面的“response.redirect”行下,但值已立即更改为之前的值!没有什么比“setcookie”例程更接近了所以请请有人保存我的疯狂并告诉我出了什么问题!?

1 个答案:

答案 0 :(得分:3)

你必须: - 从请求中获取cookie - 更新cookie - 发送回复的cookie

如果您没有在回复中发送cookie,浏览器就不会知道有关更改的任何内容! Cookies并不是一个聪明的自我更新。

希望它有所帮助。

<强>更新

var cookieDetails = Request.Cookies["yourCookie"];
if (cookieDetails != null)
{
    cookieDetails.Values["someValue"] = valueToAssign;
}
else
{
    cookieDetails = new HttpCookie("yourCookie");
    cookieDetails.Values.Add("someValue", valueToAssign);
}
Response.Cookies.Add(cookieDetails);

此示例设置一个cookie。正如你所看到的那样,第一位是检查cookie是否存在,第二位只是创建新的cookie。

您错过了将cookie发送回浏览器的最后一位

Response.Cookies.Add(cookieDetails);

希望它有所帮助。