簡體   English   中英

如何使用C#在WebAPI中讀取具有相同名稱的多個Cookie

[英]How to read multiple cookie with same name in webapi using C#

我們創建了兩個具有相同名稱的cookie。 當我遍歷循環時,我總是得到第一個cookie。 有沒有辦法分別訪問兩個cookie?

        if (Request.Cookies.AllKeys.Where(x => x == "test").Count() > 1)
        {
            foreach (var cookie in Request.Cookies.AllKeys)
            {
                if (Request.Cookies[cookie].Name == "test")
                {
                    var temp = System.Web.HttpContext.Current.Request.Cookies["test"];
                    temp.Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies.Add(temp);
                }
            }               
        };

當cookie已經存在時,您通過添加或更新cookie(通過響應的Cookies集合)對其進行更新,則第二個“重復” cookie被添加到請求的Cookies集合中。 此重復的副本實際上是您剛剛更新的副本。

盡管我沒有在MSDN文檔上進行檢查,但我相信這很可能是設計使然。 你為什么問? 因為它允許您獲取您的cookie的當前版本(您剛剛通過響應更新/添加的cookie),或由用戶的瀏覽器實際發送的cookie(因此是其cookie的當前版本)。在此時刻)。

現在,使用Cookies.Get(name),Cookies [name]或您執行的方式-從開始循環遍歷鍵集合,然后返回第一個匹配項,將始終導致第一個cookie返回。 因為用戶仍然知道它,所以它是cookie,因此不是您在此請求期間一直在更新的cookie。

如果要檢索“您的”當前版本的cookie,則必須獲取具有該名稱的最后一個而不是第一個。 您可以這樣做:

int index = Array.LastIndexOf(this.HttpRequest.Cookies.AllKeys, cookieKey);

if (index != -1)
{
    result = this.HttpRequest.Cookies[index];
}

當然,如果您沒有在當前請求中進行更新,它也將始終返回正確的cookie。

我們在特定域中不能有兩個具有相同名稱的cookie,並且默認情況下,我們會從當前域中獲取cookie。 因此,我看不到在上述代碼中可以得到兩個具有相同名稱的cookie的情況。

請更詳細地提及您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM