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



我在这件事上花了太多时间,太疯狂了。

我有一个页面基类,它包含一个"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是basepage类中的一个属性,它使用上面的函数获取/设置cookie)

现在,第二步我离开断点行上面使用"F10"变量的值改变!

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

这太疯狂了!代码哪儿也不去,调试点就在上面的"response.redirect"行下面,但值立即变为以前的值!"setcookie"程序没有任何进展,所以请有人救我一命,告诉我出了什么问题!?

您必须:-从请求中获取cookie-更新cookie-发送cookie作为响应

如果你不在响应中发送cookie,浏览器将不会知道任何关于更改的信息!!!Cookie更新自己并没有那么聪明。

希望能有所帮助。

更新

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);

希望能有所帮助。

最新更新