HTTP请求后,MVC Cookie丢失值Cookie添加值

时间:2015-08-11 09:38:53

标签: asp.net asp.net-mvc cookies

我有一个多键值对cookie。 cookie是会话cookie,即不是持久性的。它包含几个键值对数据,并且在4k大小限制范围内。

工作原理:在我的初始化操作方法中(在控制器A上),cookie已成功添加了许多键值对。到目前为止一切都很好。

问题:当我导航到另一个页面,即不同的操作方法(在控制器B上),然后向cookie添加一个值时,我发现Cookie中的所有先前值现在都消失了

请注意,我确认只有在此处添加新值时才会出现问题。不向cookie添加值并在许多页面(和控制器)中导航,cookie中的现有值都将被保留。

调查:我花了一天半的时间研究过这个问题并试了很多。在我的cookie WriteCookie()方法中:

  1. 使Cookie持久化(通过将其设置为明天到期)。已验证Firefox中的cookie存在且具有正确的日期。但是,一旦我在控制器B中为cookie添加了一个值,cookie就会丢失所有数据。

  2. 创建一个具有相同名称的新cookie,将以前的值与新值一起添加到此新cookie中。但同样,导航到另一个页面(控制器B)并向cookie添加值已经丢失了以前的所有数据。

  3. 代码:以下是我开始使用的原始代码,其中不包含许多令人心碎的尝试:

    public static class CookieHelper
    {
        public static string ReadCookie(string key)
        {
            string value = string.Empty;
    
            HttpCookie cookie = HttpContext.Current.Request.Cookies["mycookie"];
            if (cookie != null)
            {
                value = HttpContext.Current.Request.Cookies["mycookie"].Values[key];
            }
    
            return value;
        }
    
        public static void WriteCookie(string key, string value)
        {
            HttpContext.Current.Response.Cookies["mycookie"].Values[key] = value;
        }
    }
    

    任何人都可以帮助解释为什么cookie值会丢失。我的猜测,由于某些未知原因,在HTTP请求创建新cookie并覆盖现有cookie后,后续写入cookie

1 个答案:

答案 0 :(得分:1)

来自MSDN

  

您无法直接修改Cookie。相反,更改cookie包括使用新值创建新cookie,然后将cookie发送到浏览器以覆盖客户端上的旧版本。

     

修改单个子项与创建它相同。

     

要删除单个子项,您需要操作cookie的Values集合,该集合包含子项。您首先通过从Cookies对象获取cookie来重新创建cookie。然后,您可以调用Remove集合的Values方法,将要删除的子项的名称传递给Remove方法。然后,您将cookie添加到Cookies集合中,以便将其修改后的表单发送回浏览器。