【发布时间】:2013-12-16 01:00:53
【问题描述】:
好的,这个让我难住了。我编写了一个读取 cookie 值的函数。逻辑是
- 检查 Response.Cookies 以防它刚刚被写入
- 否则从 Request.Cookies 中读取以获取之前的值
如果 cookie 刚刚被写入,那么一切都很好,我得到了价值。但是,如果 cookie 没有在这次访问中写入 - 它似乎会将已存储 cookie 的值置空。
什么?
这里是代码
注意写入发生在控制器中
public static void PersistCookie(string cookieName, string cookieValue, bool persistent)
{
var cookie = new HttpCookie(cookieName, cookieValue)
{
Path = "/",
HttpOnly = true,
};
if (persistent)
cookie.Expires = DateTime.Now.AddMonths(6);
HttpContext.Current.Response.SetCookie(cookie);
}
注意读取发生在局部视图中
public static string ReadCookieValue(string cookieName, bool checkResponseFirst)
{
if (checkResponseFirst && HttpContext.Current.Response.Cookies[cookieName] != null &&
HttpContext.Current.Response.Cookies[cookieName].Value.HasValue())
return HttpContext.Current.Response.Cookies[cookieName].Value;
return HttpContext.Current.Request.Cookies[cookieName] != null ? HttpContext.Current.Request.Cookies[cookieName].Value : "";
}
似乎仅仅通过检查 cookie 是否有值,它就会把事情搞砸。
想法?
【问题讨论】:
-
您是从局部视图还是通过 Ajax 调用 ReadCookieValue?
-
你试过
HttpContext.Request.Cookies.Get而不是[]吗? -
您可以将代码 sn-p 粘贴到您在响应中设置 cookie 的位置吗?另外,如果你想清除 cookie,这个函数的预期行为是什么?
-
@Andreas - 是的,我确实是从部分角度来称呼它 - 为什么这很重要?
-
@Doug 我现在已经在原始问题中包含了 cookie 的编写
标签: c# .net asp.net-mvc-4 cookies