2009-07-16 3 views
0

Я устанавливаю файлы cookie на основе реферальных ссылок, и все они начинаются с одних и тех же букв, и говорят «google», но они заканчиваются _xxx, _yyy, _zzz или что-то вроде ссылки.C#, получение файлов cookie с разными именами

Теперь, когда я пытаюсь получить файлы cookie позже, у меня есть проблема, что я не хочу проверять все файлы cookie, я бы хотел проверить все файлы cookie, которые начинаются с «google» и на основе на этом я запустим скрипт, который продолжит обработку.

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

Любая идея, как я могу добавить StartWith или что-то в этом роде? Я новичок, так что на самом деле это не C#.

Спасибо заранее,

Pat

ответ

2

Вы должны проверить все куки, если вы хотите, чтобы найти те, с определенным суффиксом (ответ Randolpho будет работать).

Это не очень хорошая идея. Проблема в том, что чем больше файлов cookie вы создаете, тем больше накладных расходов вы кладете на сервер и соединение. Скажем, у вас есть 10 файлов cookie: google_aaa, google_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. 
} 
+1

Согласен. Мой ответ дает решение ближайшей проблемы, но лучше всего искать лучший способ. – Randolpho

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]; 
} 

Bottom LIN e: вы не можете уйти от итерации по всей коллекции файлов cookie. Но вы можете сделать это легко, используя LINQ.

0

Если вы предпочитаете использовать лямбду-выражение, таким образом

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

Надеется, что это поможет!

Смежные вопросы