2009-07-16 65 views
0

我根據推薦鏈接設置cookie,它們都以相同的字母開頭,可以說是「google」,但以_xxx,_yyy,_zzz或任何參考文件結尾。C#,獲取不同名稱的Cookie

現在,當我稍後嘗試獲取Cookie時,我遇到了問題,我不想檢查所有不同的Cookie,我想檢查以「google」開頭的所有Cookie和基於我將開始一個處理過程的腳本。

if (Request.Cookies("google")) 
{ 
    run other stuff 
} 

任何想法如何添加StartWith或什麼?我是一個新手,所以還沒有真正進入C#。

由於提前,

帕特

回答

2

你必須檢查所有的cookies,如果你想找到的人有一定的後綴(Randolpho的答案將工作)。

這樣做並不是一個特別好的主意。問題是你創建的cookie越多,你在服務器和連接上的開銷就越多。說你有10個曲奇餅:google_aaagoogle_bbb等每個請求都將10塊餅乾發送到你的服務器(包括圖片,CSS等

你最好使用一個Cookie這是某種形式的請求關鍵的存儲服務器上的所有信息,事情是這樣的:。

var cookie = Cookies["google"]; 
if(cookie!=null) 
{ 
    // cookie.Value is a unique key for this user. Lookup this 
    // key in your database or other store to find out the 
    // information about this user. 
} 
+1

我同意。我的答案爲解決眼前的問題提供瞭解決方案,但應該尋求更好的方法。 – Randolpho 2009-07-16 18:23:08

3

嗯.. HttpRequest.Cookies 集合因此,使用LINQ:

var qry = from cookieName in Request.Cookies.Keys 
      where cookieName.StartsWith("google") 
      select cookieName; 

foreach(var item in qry) 
{ 
    // get the cookie and deal with it. 
    var cookie = Request.Cookies[item]; 
} 

底部林e:你無法擺脫整個cookie集合的迭代。但是你可以使用LINQ輕鬆完成。

0

如果你願意,使用lambda表達式,這樣

var cookie = Request.Cookies.AllKeys.FirstOrDefault(s => s.Contains("yourName")); 

希望這有助於!