2013-03-01 104 views
3

我有一個應用程序利用cookie來支持準嚮導(即它是一組相互導航的頁面,並且它們必須以特定的順序進行註冊)。重複餅乾?

Logon.aspx頁面加載 - 默認頁面 - 瀏覽器cookie看起來正確。

Here we have only one cookie.

有一個cookie並有正確的價值。這可確保下一頁(註冊協議)知道它是從Logon.aspx頁面加載的。然而,當我進入該頁面瀏覽器的cookie看起來很大的不同:

Now we have two of the same cookie.

現在我們有兩個相同的cookie。

這不是出現會導致任何實際問題 - 但我不能確定它不會。那麼,讓我告訴你的代碼我使用設置Cookie(因爲也許有什麼毛病吧):

if (!this.IsPostBack) 
{ 
    Utility.HandleReferrer(Request, Response, "Logon.aspx"); 
    Response.Cookies["lastpage"].Value = "Enroll.aspx"; 
} 

HandleReferrer方法是這樣的:

static public void HandleReferrer(HttpRequest request, HttpResponse response, string expectedReferrer) 
{ 
    var cookie = request.Cookies["lastpage"]; 
    if (cookie != null && cookie.Value.ToLower().Contains(expectedReferrer.ToLower())) 
    { 
     return; 
    } 

    response.Redirect("Logon.aspx"); 
} 

所以,爲什麼它在世界上覆制這個cookie?似乎沒有創造兩個以上。

+2

? – 2013-03-01 14:53:49

+0

@KirkWoll,我正在使用Glimpse(http://getglimpse.com/) – 2013-03-01 15:01:45

回答

2

我建議你做以下其中一項。

首先,獲取最新的一瞥,然後再試一次。

如果它仍然顯示2個帶有該名稱的餅乾,然後得到firebug和/或fiddler並以此方式查看。如果我不得不猜測,我會說有一些錯誤的一瞥或錯誤的方式來解釋結果。也許一瞥展示了在處理請求之前和之後存在哪些cookie?

第三種選擇是簡單地從您自己的.net代碼發出cookies集合。例如:

foreach(HttpCookie cookie in request.Cookies) { 
    Response.Write(String.Format("{0} = {1}", cookie.Name, cookie.Value)); 
} 

看看會發生什麼。

+0

Glimpse有問題,我確認沒有兩個實際的Cookie。 – 2013-03-26 20:05:20

+0

對於它的價值,我在Visual Studio中也注意到了這一點。當我逐步檢查Response對象時,我可以看到兩個同名的Cookie。 – Sinaesthetic 2013-06-11 00:26:35

0

我嘗試了另一種方法,通過創建一個方法來返回最新的cookie發生,這樣我總能得到正確的數據。

這種方法期望從請求的cookie收集和檢索cookie的名稱,並返回最新的票(通常是加密的信息)

private static FormsAuthenticationTicket GetLatestCookie(HttpCookieCollection cookies, string cookieName) { 
    var cookieOccurrences = new List<FormsAuthenticationTicket>(); 

    for (int index = 0; index < cookies.Count; index++) { 
     if (cookies.GetKey(index) == cookieName) { 
      FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookies[index].Value); 
      cookieOccurrences.Add(ticket); 
     } 
    } 

    DateTime oldestTime = DateTime.MinValue; 
    FormsAuthenticationTicket oldestTicket = null; 
    foreach (var formsAuthenticationTicket in cookieOccurrences) { 
     if (formsAuthenticationTicket.Expiration > oldestTime) { 
      oldestTime = formsAuthenticationTicket.Expiration; 
      oldestTicket = formsAuthenticationTicket; 
     } 
    } 

    return oldestTicket; 
} 
你用什麼工具來查看餅乾