我遇到了在请求之间丢失ASP.NET Cookie的问题。
我有一个ASCX控件,它有多个过滤复选框。我可以选中/取消选中这些复选框,然后点击一下。在这个applyFilters方法中,我根据是否选中/取消选中复选框来设置cookie。执行此操作的代码是:
public void setFilterCookie(string name, string val)
{
if (!String.IsNullOrEmpty(val) && (val != null && !val.Equals("-1")))
{
if (request.Cookies[name] != null)
{
HttpCookie myCookie = new HttpCookie(name);
myCookie.Expires = DateTime.Now.AddDays(-2d);
response.Cookies.Add(myCookie);
request.Cookies.Remove(name);
}
HttpCookie cookie = new HttpCookie(name, val);
cookie.Expires = DateTime.Now.AddDays(5);
response.Cookies.Add(cookie);
}
else
{
if (request.Cookies[name] != null)
{
HttpCookie myCookie = new HttpCookie(name);
myCookie.Expires = DateTime.Now.AddDays(-2d);
response.Cookies.Add(myCookie);
request.Cookies.Remove(name);
}
}
}
设置cookie后,我想从控件的父容器中数据绑定网格。在这个数据绑定方法中,我使用以下方法读取cookie:
public string getCookie(string cookieName)
{
if (isNotNullOrEmpty(cookieName))
return request.Cookies[cookieName].Value.ToString().Trim();
else
return null;
}
问题在于,当我设置cookie时,我可以看到设置的值(例如response.Cookies [“Domain”] =“5”)但是当我读它们时,值为字符串为空。
有人可以告诉我出了什么问题吗?
谢谢
答案 0 :(得分:0)
您不应该多次删除请求Cookie并添加具有相同名称的响应Cookie。这应该有用。
public void setFilterCookie(string name, string val)
{
var cookieValue = string.Empty;
var expires = 0;
if (!string.IsNullOrWhiteSpace(val) && !val.Equals("-1"))
{
cookieValue = val;
expires = 5;
}
else
{
expires = -2;
}
var cookie = new HttpCookie(name, cookieValue) {Expires = DateTime.Now.AddDays(expires)};
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}