更新cookie的值不起作用

时间:2013-10-09 18:02:56

标签: c# asp.net webforms

我需要获取cookie的值并更新它。我一定做错了,因为我的cookie没有更新。这是我的代码:

if (HttpContext.Current.Request.Cookies.AllKeys.Contains(EconnectConstants.FILE_SHARE_DOCUMENTS))
{
  var existingCookie = HttpContext.Current.Request.Cookies[EconnectConstants.FILE_SHARE_DOCUMENTS];
  existingCookie.Value = encriptedInput;
  existingCookie.Expires = DateTime.Now.AddMonths(1);
  HttpContext.Current.Response.Cookies.Set(existingCookie);
}
else
{
  var cookie = new HttpCookie(EconnectConstants.FILE_SHARE_DOCUMENTS, encriptedInput);
  cookie.Expires = DateTime.Now.AddMonths(1);
  cookie.Value = encriptedInput;
  HttpContext.Current.Response.Cookies.Add(cookie);
}  

有谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:1)

这似乎很可疑:

HttpContext.Current.Request.Cookies.Set(existingCookie);

您正在更改请求对象的属性,它不应该影响响应(这会影响用户存储的内容)。


您可以删除if并执行:

HttpContext.Current.Request.Cookies[EconnectConstants.FILE_SHARE_DOCUMENTS].Value = encriptedInput;
HttpContext.Current.Request.Cookies[EconnectConstants.FILE_SHARE_DOCUMENTS].Expires = DateTime.Now.AddMonths(1);

答案 1 :(得分:0)

这个问题已经很久了,但我前一段时间遇到过这个问题。正如@argaz解释的那样,由于您正在更新Response中的值,因此您无法从另一个对象(Request)获取它。在下一个回发中,值将从“请求”传输到“响应”。

因此,如果您的cookie存储的数据仅对当前会话AND有效 你不能等到回发发生,然后实现一个假(因为根据特殊情况从同一刚刚更新的响应读取cookie值或强制回发到同一页面),考虑使用Session对象,这不依赖于回发。 / p>