2017-08-31 93 views
0

我寫了下面的代碼到期的所有cookiesrequest。但隨着到期他們一起,我需要設置domain屬性一些cookies明確的。我不知道是否有更好的方法做同樣的...優化cookie過期代碼

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session.Abandon(); 
    HttpCookie cookie; 
    string cookieName; 
    int cookieCount = Request.Cookies.Count; 

    for (int i = 0; i < cookieCount; i++) 
    { 
    cookieName = Request.Cookies[i].Name; 
    cookie = new HttpCookie(cookieName); 
    cookie.Expires = DateTime.Now.AddDays(-1); 

    if (string.Compare(cookieName, "cookie1") == 0 
     || string.Compare(cookieName, "cookie2") == 0 
     || string.Compare(cookieName, "cookie3") == 0 
     || string.Compare(cookieName, "cookie4") == 0) 
    { 
     cookie.Domain = ".mydomain.com"; 
    } 

    Response.Cookies.Add(cookie); 
    } 

    Response.Redirect("my redirect link"); 
} 

我是新來的C#所以不知道是否有任何其他更好的方法來設置domain值的cookies選擇list只。我是從腳本背景,基本上是從tcl,而且通常我可以簡單地或檢查給定項目列表中的不一樣:

if ($item in $list){ 
    // Do something 
} 

這類似於執行lsearch

反正,我不喜歡邏輯運算符if的原因是因爲在將來,我可能會在listcookies來執行相同的動作,我不想要保持餡if條件檢查。

我也許可以在這裏做的tcl同樣喜歡擁有所有的cookie名稱的list,然後在list每個cookie名稱for循環檢查,但不知道它是多麼昂貴。

任何意見,將不勝感激。

+0

看過來:https://stackoverflow.com/questions/31833109/remove-and-delete-all-cookies-of-my-asp-net-c-sharp-application剛剛更新的響應cookie。你不更新cookie,你創建一個新的cookie。 – Niels

+1

太多的餅乾難以維護。 ASP.NET有其他機制來保持頁面之間的數據。如果您可以告訴我們您想要達到的目標,我們可以爲您提供更好的解決方案。 – Win

+0

我正在嘗試爲我的網站在同一個域上創建單個註銷頁面。所以我試圖刪除所有的cookies,基本上是我的會話cookie,這樣如果用戶退出任何網站,他/她就會退出所有其他子網站。 – Naphstor

回答

0

您使用new HttpCookie創建一個新的Cookie。因此,現有Cookie的域不會被複制。你最好更新現有的cookie。例如在:Remove and delete all cookies of my ASP NET c-sharp application

從上面的網址複製下面的代碼:

foreach (string key in Request.Cookies.AllKeys) 
{ 
    HttpCookie c = Request.Cookies(key); 
    c.Expires = Now.AddMonths(-1); 
    Response.AppendCookie(c); 
} 

您可以通過無效設定到期日在過去的某個日期的cookie。

+0

我試着按照你的建議做同樣的事情,但是如果我查看響應cookie,我會將域值視爲空。 – Naphstor