我有一个多键值对cookie。 cookie是会话cookie,即不是持久性的。它包含几个键值对数据,并且在4k大小限制范围内。
工作原理:在我的初始化操作方法中(在控制器A上),cookie已成功添加了许多键值对。到目前为止一切都很好。
问题:当我导航到另一个页面,即不同的操作方法(在控制器B上),然后向cookie添加一个值时,我发现Cookie中的所有先前值现在都消失了
请注意,我确认只有在此处添加新值时才会出现问题。不向cookie添加值并在许多页面(和控制器)中导航,cookie中的现有值都将被保留。
调查:我花了一天半的时间研究过这个问题并试了很多。在我的cookie WriteCookie()方法中:
使Cookie持久化(通过将其设置为明天到期)。已验证Firefox中的cookie存在且具有正确的日期。但是,一旦我在控制器B中为cookie添加了一个值,cookie就会丢失所有数据。
创建一个具有相同名称的新cookie,将以前的值与新值一起添加到此新cookie中。但同样,导航到另一个页面(控制器B)并向cookie添加值已经丢失了以前的所有数据。
代码:以下是我开始使用的原始代码,其中不包含许多令人心碎的尝试:
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