2009-07-16 20 views
0

I dans des cookies sur la base des liens de référence et ils commencent tous par les mêmes lettres, permet de dire « google », mais ils finissent par _xxx, _yyy, _zzz ou tout ce qui est la référence.C#, obtenir les cookies avec des noms différents

Maintenant, quand j'essaie d'obtenir les cookies plus tard, j'ai le problème que je ne veux pas vérifier tous les différents cookies, je voudrais vérifier tous les cookies qui commencent par "google" et basé sur ce que je vais commencer un script qui se poursuit avec le traitement.

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

Une idée de comment je peux ajouter StartWith ou quelque chose? Je suis un débutant, donc pas vraiment en C# pour le moment.

Merci à l'avance,

Pat

Répondre

2

Vous devez vérifier tous les cookies, si vous voulez trouver ceux avec un certain suffixe (la réponse de Randolpho fonctionnera).

Ce n'est pas une très bonne idée de le faire de cette façon. Le problème est que plus vous créez de cookies, plus vous surchargez le serveur et la connexion. Disons que vous avez 10 cookies: google_aaa, google_bbb, etc. Chaque demande enverra tous les 10 cookies à votre serveur (ceci inclut les demandes d'images, css, etc.)

Vous feriez mieux d'utiliser un seul cookie qui est en quelque sorte de la clé de toutes les informations stockées sur votre serveur Quelque chose comme ceci:..

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

Je suis d'accord. Ma réponse fournit une solution au problème immédiat, mais un meilleur moyen devrait probablement être recherché. – Randolpho

3

Eh bien .. HttpRequest.Cookies est une collection Il faut donc utiliser 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]; 
} 

Bas lin e: vous ne pouvez pas éviter d'itérer toute la collection de cookies. Mais vous pouvez le faire facilement en utilisant LINQ.

0

Si vous préférez, utilisez l'expression lambda, de cette façon

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

Hope this aide!

Questions connexes