¿Utilizo la respuesta en un evento de página (por ejemplo, carga) ya que es una respuesta de ASP.NET y solicito al presionar un botón, ya que esta es una respuesta que va a ASP.NET para su procesamiento? ¿O hay más?Cuándo usar Request.Cookies en Response.Cookies?
Respuesta
En una aplicación web, la solicitud es lo que proviene del navegador y la respuesta es lo que el servidor envía de vuelta. Al validar cookies o datos de cookies del navegador, debe usar Request.Cookies. Cuando construya cookies para enviarlas al navegador, deberá agregarlas a Response.Cookies.
Son 2 cosas diferentes, una savès [Respuesta], el otro LEE [Petición]
en una cookie (informática hablando) :) se guarda un archivo pequeño para un período de tiempo que contiene un objeto del tipo cadena
en el marco .NET que save a cookie haciendo:
HttpCookie myCookie = new HttpCookie("MyTestCookie");
DateTime now = DateTime.Now;
// Set the cookie value.
myCookie.Value = now.ToString();
// Set the cookie expiration date.
myCookie.Expires = now.AddMinutes(1);
// Add the cookie.
Response.Cookies.Add(myCookie);
Response.Write("<p> The cookie has been written.");
Usted escribió una cookie que estará disponible durante un minuto ... normalmente hacemos now.AddMonth (1) para que pueda guardar una cookie durante un mes entero.
Para retrieve a cookie, se utiliza la solicitud (que está solicitando), como:
HttpCookie myCookie = new HttpCookie("MyTestCookie");
myCookie = Request.Cookies["MyTestCookie"];
// Read the cookie information and display it.
if (myCookie != null)
Response.Write("<p>"+ myCookie.Name + "<p>"+ myCookie.Value);
else
Response.Write("not found");
Recuerde:
Para eliminar una cookie, no hay ningún código directa, el truco está en Guarde el mismo nombre de cookie con una fecha de caducidad que ya pasó, por ejemplo, ahora.AddMinutes (-1)
esto eliminará la cookie.
Como puede ver, cada vez que el tiempo de vida de la cookie expira, ese archivo se elimina automáticamente del sistema.
Las cookies provienen del navegador en la colección Request.Cookies. Ahí es donde lees las cookies que se enviaron.
Para devolver las cookies al navegador, las coloca en la colección Response.Cookies.
Si desea eliminar una cookie, debe indicarle al navegador que la elimine enviando la cookie con una fecha de vencimiento que haya pasado. El navegador está utilizando la hora local de la computadora cliente, por lo que si está utilizando la hora del servidor para crear una fecha, asegúrese de restar al menos un día para asegurarse de que realmente ha pasado en la hora local del cliente.
Al escribir una cookie, use la Respuesta, pero la lectura puede depender de su situación. Normalmente, usted lee de la Solicitud pero si su aplicación está tratando de obtener una cookie que acaba de escribirse o actualizarse y el viaje de ida y vuelta al navegador no se ha realizado, puede necesitar leerlo en Respuesta.
He estado usando este patrón por un tiempo y me funciona bien.
public void WriteCookie(string name, string value)
{
var cookie = new HttpCookie(name, value);
HttpContext.Current.Response.Cookies.Set(cookie);
}
public string ReadCookie(string name)
{
if (HttpContext.Current.Response.Cookies.AllKeys.Contains(name))
{
var cookie = HttpContext.Current.Response.Cookies[name];
return cookie.Value;
}
if (HttpContext.Current.Request.Cookies.AllKeys.Contains(name))
{
var cookie = HttpContext.Current.Request.Cookies[name];
return cookie.Value;
}
return null;
}
Un enfoque alternativo pero igual sería simplemente escribir su cookie en las colecciones Response.Cookies AND Request.Cookies al guardar. De esta forma, cualquier lógica adicional en el ciclo puede leer la cookie que acaba de establecer sin mirar en el objeto Response. – Chris
Chris, estuvo de acuerdo y yo solía hacerlo, pero recientemente leí que modificar el objeto Request es un no-no. Intentaremos encontrar una referencia. – andleer
Gracias, Chris. Andrew - Me encantaría ver esa referencia. Por ahora voy con la solución de Chris. – catfood
Cuando creo o actualizo una cookie en .NET normalmente lo hago tanto para la colección de cookies de solicitud como de respuesta. De esta forma, puede estar seguro de que si intenta leer la cookie más adelante en la secuencia de solicitud de la página, tendrá la información correcta.
Alex, este problema en particular me ha estado molestando todo el día. Gracias por aclararlo tan simple! – catfood
Sí, hay algunos comportamientos interesantes en los que establecer una cookie en Response también lo establecerá en la solicitud si no existiera. Pero si ya existía en la Solicitud, establecer Respuesta NO actualiza la Solicitud. Parece una característica destinada a ser útil, pero algo inconsistente. Ciertamente, al modificar un múltiplo de cookie varias veces en la misma solicitud, puede encontrarse con errores. – AaronLS
El código de Andrew dio un error en el método "AllKeys.Contains". Así que he corregido un poco ..
public void WriteCookie(string strCookieName, string strCookieValue)
{
var hcCookie = new HttpCookie(strCookieName, strCookieValue);
HttpContext.Current.Response.Cookies.Set(hcCookie);
}
public string ReadCookie(string strCookieName)
{
foreach (string strCookie in HttpContext.Current.Response.Cookies.AllKeys)
{
if (strCookie == strCookieName)
{
return HttpContext.Current.Response.Cookies[strCookie].Value;
}
}
foreach (string strCookie in HttpContext.Current.Request.Cookies.AllKeys)
{
if (strCookie == strCookieName)
{
return HttpContext.Current.Request.Cookies[strCookie].Value;
}
}
return null;
}
¿Recordó incluir System.Linq? Al hacerlo, corrigió el error en mi archivo. – chocojosh
Si solo es un pequeño error, sugiera una edición en la publicación original antes de duplicar la respuesta. – Spontifixus
- 1. Diferencia entre Request.Cookies y Response.Cookies
- 2. HttpCookieCollection.Add vs HttpCookieCollection.Set - ¿Se copia la colección Request.Cookies a la colección Response.Cookies?
- 3. Cuándo usar Ruby vs Cuándo usar PHP
- 4. Cuándo usar categorías y cuándo usar subclases?
- 5. cuándo usar Tarea y cuándo usar Subproceso?
- 6. Cuándo usar undef_method, y cuándo usar remove_method?
- 7. Cuándo usar Pepino y cuándo usar RSpec?
- 8. Cuándo usar vectores y cuándo usar matrices en C++?
- 9. Cuándo usar componentes y cuándo usar extensiones en Yii?
- 10. Cuándo usar dup, y cuándo usar clon en Ruby?
- 11. Cuándo usar atributos vs. cuándo usar propiedades en python?
- 12. ¿Cuándo usar == y cuándo usarlo?
- 13. Agregar cookie a la colección Request.Cookies
- 14. Cuándo usar sincronizado en Java
- 15. cuándo usar MVC en PHP?
- 16. ¿Cuándo usar PreRender en PageLoad?
- 17. ¿Cuándo debería usar # en ColdFusion?
- 18. cuándo usar destructor en php?
- 19. ¿Cuándo usar pragmas en sqlite?
- 20. Cuándo usar interfaces en Dart?
- 21. ¿Cuándo usar self en Model?
- 22. Cuándo usar GC.Collect() en .NET?
- 23. Cuándo usar layoutSubview en iOS
- 24. ¿Cuándo debe usar JCR y cuándo debe usar JPA/RDBMS?
- 25. Cuándo usar un módulo y cuándo usar una clase
- 26. Cuándo usar Requirejs y cuándo usar javascript incluido?
- 27. Cuándo usar assert() y cuándo usar try catch?
- 28. Cuándo usar interfaces o clases abstractas? Cuándo usar ambos?
- 29. Cuándo usar y cuándo no usar Try Catch Finally
- 30. Cuándo usar el sistema() y cuándo usar execv *()?
+1 no me di cuenta que tenía que volver a guardar la cookie para actualizar la expiración – Andrew
1 explicación clara y sencilla –
Esto era en su mayoría servicial, pero un poco engañoso ya en su ejemplo, cuando vaya a recuperar la cookie, en realidad sobrescribe la cookie que se guardó previamente con la línea 'HttpCookie myCookie = new HttpCookie (" MyTestCookie ");' En su lugar, use algo como 'HttpCookie myCookie = new HttpCookie (" MyWrittenCookie ") ; ' –