ASPX Cookies丢失了

时间:2016-09-30 17:16:59

标签: c# asp.net cookies

我遇到了在请求之间丢失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”)但是当我读它们时,值为字符串为空。

有人可以告诉我出了什么问题吗?

谢谢

1 个答案:

答案 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);
    }