读取刚刚写入的cookie会导致cookie被消隐

时间:2013-11-29 19:38:56

标签: c# .net asp.net-mvc-4 cookies

好的,所以这个让我难过。我编写了一个读取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是否有值,它会让事情变得混乱。

思想?

2 个答案:

答案 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有一个解决方法,但我很高兴我不会发疯!

谢谢你的帮助