好的,所以这个让我难过。我编写了一个读取cookie值的函数。逻辑是
如果刚刚编写了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是否有值,它会让事情变得混乱。
思想?
答案 0 :(得分:1)
我不确定您是否可以在部分视图中设置Cookie。使用Response.SetCookie设置cookie时,信息将在Set-Cookie HTTPHeader字段中返回给浏览器。我不认为部分视图可以设置此值,在调用Response.SetCookie后尝试使用Fiddler2检查应用程序响应。
我通常使用普通的Javascript设置我的cookie。
答案 1 :(得分:1)
好的,所以经过更多的网络搜索后,一位优秀的同事会发现以下内容
看起来我在.NET中遇到了好奇心。
查看这篇文章
http://www.codeproject.com/Articles/3106/On-The-Care-and-Handling-of-Cookies
如果您尝试访问Response.Cookies集合中不存在的cookie,则将在值和过期日期01 1 Jan-0001 00:00中创建一个空字符串。奇怪的是,它还会在Request.Cookies集合中创建一个匹配的cookie(如果尚不存在)。
因此,如果您查看响应中的cookie,那么您将使用空cookie间接覆盖客户端计算机上的cookie,因为浏览器关闭时会过期
所以我的问题已经解决(或者应该是无法解决的)。事实证明我使用ViewBag有一个解决方法,但我很高兴我不会发疯!
谢谢你的帮助