net_sessionid leer crear cookie asp asp.net httpcookie

asp.net - leer - ¿Por qué Request.Cookies devuelve una cadena en lugar de un objeto HttpCookie en el bucle foreach?



leer cookie c# (3)

Esta mañana, accidentalmente, vi el siguiente código de código, me sorprendió bastante porque funciona muy bien.

No mire su lógica, por favor, solo tengo curiosidad por qué la HttpCookieCollection (Request.Cookies en este caso) devuelve una cadena (nombre de cookie) en lugar de un objeto HttpCookie en el ciclo foreach. ¿Es un problema de coherencia porque normalmente obtenemos el objeto HttpCookie en esta colección por índice / nombre?

Gracias,

foreach (string cookieKey in System.Web.HttpContext.Current.Request.Cookies) { HttpCookie tmpCookie = System.Web.HttpContext.Current.Request.Cookies[cookieKey]; if (tmpCookie != null && tmpCookie["RecentlyVisited"] != null) { cookie.Add(tmpCookie); } }


Dado que también puede obtener cookies por su índice numérico, en realidad es posible escanear múltiples cookies con el mismo nombre sin tener que copiarlas en una CookieCollection o algo así.

Esto debería funcionar:

var cookieName = "yourcookie"; var matches = cookies.AllKeys .Select((name, i) => new {name, i}) .Where(x => x.name == cookieName) .Select(x => DoSomethingWithEachMatch(cookies[x.i]));


Es posible que desee recorrer sus cookies por índice:

HttpCookieCollection MyCookieColl; HttpCookie MyCookie; MyCookieColl = Request.Cookies; // Capture all cookie names into a string array. String[] arr1 = MyCookieColl.AllKeys; // Grab individual cookie objects by cookie name. for (int i = 0; i < arr1.Length; i++) { MyCookie = MyCookieColl[arr1[i]]; Debug.WriteLine("Cookie: " + MyCookie.Name); Debug.WriteLine("Expires: " + MyCookie.Expires); Debug.WriteLine("Secure:" + MyCookie.Secure); }


Tiene más sentido iterar a través de una colección por las teclas. De esa manera, tiene acceso a ambas claves y puede acceder fácilmente al valor llamando a System.Web.HttpContext.Current.Request.Cookies[cookieKey];