2009-07-16 64 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")); 

希望这有助于!