2012-09-04 46 views
6

我工作的網站由幾個項目組成(用多種語言編寫)。現在,我們不得不在查詢字符串和會話變量中使用一些笨拙的代碼,以防止某個人從項目進入項目時登錄。由於Cookie是特定於域的,因此我們試圖將其轉換爲它們,因爲它們可以使用一種語言在一個項目中設置,但可以使用不同語言的不同項目(在同一個域中)訪問。Cookie如何在ASP.NET中工作?

但是我在更改cookie值並刪除它們時遇到問題。或者更具體地說,我無法對餅乾棒做出任何更改。

舉例來說,在我的註銷代碼:

if (Request.Cookies["thisuserlogin"] != null) 
{ 
    HttpCookie myCookie = new HttpCookie("thisuserlogin"); 
    myCookie.Value = String.Empty; 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    Response.Cookies.Add(myCookie); 
    Response.Cookies.Set(myCookie); 
    litTest.Text = myCookie.Expires.ToString() + "<br />" + Request.Cookies["thisuserlogin"].Expires.ToString(); 
} 

我風與一行是昨天和下一行是1/1/0001 12:00:00即使他們應該是相同的cookie。那麼爲什麼即使設置了Cookie,它的價值也沒有改變?有沒有辦法強制用戶的計算機更新cookie的值,包括刪除?

非常感謝。 PS您可以提供任何網址以提供易於理解的Cookie入門知識。

+2

我編輯了標題,因爲cookie不是C#具體。 ASP.NET更合適。 – usr

回答

0

您應該在客戶端使用像Fiddler這樣的工具來捕獲所有數據來回。這將幫助您看到您的Cookie應該設置爲過去的日期(並且也會在下一個請求中丟失)。

至於您的文本輸出,您列出了您創建的cookie到期時間以及請求 Cookie的到期時間,但沒有cookie。如果您要查看響應cookie,則應該看到設置的日期。此外,撥打Response.Cookies.Set是不必要的。 Response.Cookies.Add應該是你所需要的。

+0

提琴手是一個偉大的工具阿森納 – NickSuperb

+0

我不明白。因爲我正在使用Add命令,所以輸出中的兩個cookie不應該是具有特定到期日期的同一個cookie嗎?如果Set命令是不必要的,爲什麼它在那裏? – Alverant

+0

設置是爲了在將代碼從ASP移動到ASP.Net(確實是VB.Net)時保持兼容性,就像[Response.End](http://msdn.microsoft.com/zh-cn/library/system.web .httpresponse.end.aspx)(不正確,請參閱下一條評論)。至於他們爲什麼不改變,就這樣看待它。你的請求cookies中有一個cookie(來自客戶端)。你用同樣的名字創建一個全新的cookie,並把它放在響應cookie中(這將發送給客戶端)。此時,即使它們具有相同的名稱,它們也是兩個完全不同的cookie,並指向不同的對象。 – Joshua

1

http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx

if (Request.Cookies["thisuserlogin"] != null) 
{ 
    HttpCookie byeCookie = new HttpCookie("thisuserlogin"); 
    byeCookie.Expires = DateTime.Now.AddDays(-1); 
    Response.Cookies.Add(byeCookie); 

    // Update Client 
    Response.Redirect(Request.RawUrl); 
} 
+0

我無法刪除域上的所有Cookie。我需要刪除特定的Cookie,並讓它們保持刪除狀態,正如我的示例中所述,這不會發生。 – Alverant

+0

然後更簡單。 – NickSuperb