【问题标题】:cookie problems in asp.net. Values reverting after response.redirectasp.net 中的 cookie 问题。 response.redirect 后恢复的值
【发布时间】:2012-03-31 07:02:30
【问题描述】:

我在这上面花了很多时间,这太疯狂了。

我有一个包含“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”例程没有任何进展,所以请有人拯救我的精神错乱并告诉我出了什么问题!?

【问题讨论】:

  • 我一直在玩它。仍然没有喜悦:-(即时监视窗口显示正确的更新值,直到我跨过“response.redirect”行,此时它立即变回其初始值,而无需通过“setcookie”函数。我真的看不出这个值是如何以这种方式改变的。
  • 放弃。在 SQL Server 中恢复为基于会话的变量。

标签: asp.net cookies response.redirect httpcookie


【解决方案1】:

您必须: - 从请求中获取 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);

希望对你有帮助。

【讨论】:

  • 是的,我们可以通过您提到的这种方式准确获取 cookie 值,希望 OP 也这样做。
  • 我不明白,抱歉...我的函数中的这段代码正是这样做的,不是吗? Dim cookie As HttpCookie = context.Request.Cookies(cookieName) cookie.Expires = DateTime.Now.AddDays(7) cookie.Value = cookieValue
  • 对不起,我的回答应该更具体。将在一秒钟内更新它并包含示例。
  • 感谢更新...但这似乎不是问题 - 我使用了 MSDN 站点中的示例,并且 cookie 已经存在,您需要做的就是更新值以及可选的到期日期。我尝试将其更改为您的版本,当我使用 fiddler 进行检查时,它似乎添加了一组重复的 cookie!
  • 这对我很有用。我的问题是我没有使用“Request.Cookies”来更新值。使用这个修复它非常感谢!
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 2012-08-06
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多