我试图在一个cookie中存储一些值,而不是创建大量的cookie。我有一个函数来获取命名值并设置给定名称的值。
当重新加载表单时,cookie似乎是空的......并且至少有一次在集合中似乎有2个具有相同名称的cookie。
代码如下,任何人都可以看到我做错了吗?
澄清有一个cookie,它应该存储几个值,这些值将使用类似于下面的代码
调用 CookieValues.Set("Test", "TheTestValue", resp);
CookieValues.Set("Name", "Nick", resp);
CookieValues.Set("Sex", "male", resp);
var x = CookieValues.Get("Test", resp);
public static class CookieValues
{
public static void Set(string key, string value, HttpResponseBase resp)
{
HttpCookie cookie = GetCookie(resp);
cookie[key] = value;
cookie.Expires = DateTime.Now.AddYears(1);
resp.Cookies.Add(cookie);
}
public static string Get(string key, HttpResponseBase resp)
{
HttpCookie cookie = GetCookie(resp);
if (cookie[key] != null)
{
return cookie[key];
}
return "";
}
private static HttpCookie GetCookie(HttpResponseBase resp)
{
HttpCookie cookie = resp.Cookies["HolidayAdmin"];
if (cookie == null)
{
cookie = new HttpCookie("HolidayAdmin");
}
return cookie;
}
}
答案 0 :(得分:1)
问题在于在Set
方法中继续将Cookie添加到响应中:
resp.Cookies.Add(cookie);
如果您现在创建三个cookie值,那么您有三个cookie,因为您将它们添加三次。
我建议调整GetCookie(HttpResponse)
方法以添加Cookie。您可以从Set
删除来电。
private static HttpCookie GetCookie(HttpResponseBase resp)
{
HttpCookie cookie = resp.Cookies["HolidayAdmin"];
if (cookie == null)
{
cookie = new HttpCookie("HolidayAdmin");
resp.Cookies.Add(cookie);
}
return cookie;
}
答案 1 :(得分:1)
我不是c#中的授权大师,所以我担心我可能会遗漏一些东西,但这是我对这个问题的解释。
您正在从响应中添加和获取Cookie 。因此,它们应该在创建后立即可用(在同一响应中)。但是,一旦响应消失,并且cookie实际上已在客户端上设置,您必须使用 request (或者我相信)来获取它。
然而,一种方法是将Get
方法更改为:
public static string Get(string key, HttpRequestBase resp)
显然,以这种方式发送请求。这应该意味着您只能在客户端上实际设置cookie之后才请求cookie,即在新请求上。但似乎响应实际上会在创建时将其复制到请求中,因此即使在当前的响应中它也应该可用。
如果不是,则可能需要检查Get
中的回复和请求。
答案 2 :(得分:0)
我尝试执行此代码,从我看到您尝试创建Cookie“HolidayAdmin”并将此Cookie的值设置为键值对。
"HolidayAdmin" -- Test=ThetestValue&name=nick&Sex=male
答案 3 :(得分:0)
这段代码现在似乎对我有用。主要区别在于现在使用请求和响应。还有cookie被保留的地方
public static class CookieValues
{
public static void test(HttpResponseBase resp, HttpRequestBase request, HttpResponseBase response)
{
Set("Test", "123", request, response);
Set("Name", "Nick", request, response);
Set("Sex", "male", request, response);
var x = Get("Test", request);
}
public static void Set(string key, string value, HttpRequestBase request, HttpResponseBase response)
{
HttpCookie cookie = GetCookie(request);
cookie[key] = value;
cookie.Expires = DateTime.Now.AddYears(1);
response.Cookies.Add(cookie);
}
public static string Get(string key, HttpRequestBase request)
{
HttpCookie cookie = GetCookie(request);
if (cookie[key] != null)
{
return cookie[key];
}
return "";
}
private static HttpCookie GetCookie(HttpRequestBase request)
{
HttpCookie cookie = request.Cookies["HolidayAdmin"];
if (cookie == null)
{
cookie = new HttpCookie("HolidayAdmin");
request.Cookies.Add(cookie);
}
return cookie;
}
}