C#,获取不同名称的cookie

时间:2009-07-16 18:12:10

标签: c# asp.net cookies

我根据引荐链接设置了Cookie,它们都以相同的字母开头,让我们说“谷歌”,但它们以_xxx,_yyy,_zzz或其他任何参考结尾。

现在,当我尝试稍后获取cookie时,我遇到的问题是我不想检查所有不同的cookie,我想检查所有以“google”开头的cookie并基于我将开始一个继续处理的脚本。

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

我知道如何添加StartWith或其他东西吗?我是一个新手,所以不是真的进入C#。

提前致谢,

专利

3 个答案:

答案 0 :(得分: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];
}

结论:你无法摆脱整个cookie集合的迭代。但是你可以使用LINQ轻松完成。

答案 1 :(得分:2)

如果你想找到具有特定后缀的cookie,你必须检查所有的cookie(Randolpho的答案是有效的。)

这样做并不是一个特别好的主意。问题是您创建的cookie越多,您在服务器和连接上的开销就越大。假设您有10个Cookie:google_aaagoogle_bbb等。每个请求都会将所有10个Cookie发送到您的服务器(包括图片请求,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.
}

答案 2 :(得分:0)

如果您愿意,可以这样使用lambda表达式

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

希望这有帮助!