2016-09-30 65 views
0

我有一個ASP.NET cookie在請求之間丟失的問題。ASPX Cookies丟失

我有一個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:

public string getCookie(string cookieName) 
    { 
     if (isNotNullOrEmpty(cookieName)) 
      return request.Cookies[cookieName].Value.ToString().Trim(); 
     else 
      return null; 
    } 

的問題是,當我設置餅乾,我可以看到所設定的值(例如response.Cookies [「域」] = 「5」),但是當我讀它們時,該值是空字符串。

有人可以告訴我什麼是錯的?

謝謝

回答

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); 
    } 
+0

這不起作用。我仍然失去cookie值 –