2010-04-22 14 views
6

¿Es posible actualizar un valor de cookies ASP.NET sin tener que actualizar el tiempo de caducidad? Descubrí que si trato de actualizar una Cookie sin actualizar el vencimiento, esa cookie ya no existe. Tengo el siguiente código que intento modificar. ¿Cuál es el punto de tener un vencimiento, si cada vez que se actualiza el valor de la cookie, también lo es la expiración?Valor de actualización de cookies de ASP.NET sin actualizar la caducidad?

 HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 

     if (cookie == null) 
      cookie = new HttpCookie(constantCookie); 

     cookie.Expires = DateTime.Now.AddYears(1); 
     cookie.Value = openClose; 
     HttpContext.Current.Response.Cookies.Set(cookie); 
+2

"¿Cuál es el punto de tener un vencimiento, si cada vez que se actualiza el valor de la cookie, también lo es el vencimiento? " - Bueno, en realidad eso es lo que quieres la mayor parte del tiempo. Escenarios como "si no visitas durante un mes nos olvidaremos de ti", depende del hecho de que cada vez que visites la cookie expirará dentro de un mes. –

+0

Muy cierto, definitivamente estoy de acuerdo contigo en este punto. – aherrick

Respuesta

5

La clase HttpCookie ASP.NET no puede inicializar la propiedad Expires al leer en una cookie de una petición HTTP (ya que la especificación HTTP no requiere que el cliente incluso enviar el valor de caducidad para el servidor en el primer lugar). Y si no establece la propiedad Expires antes de volver a establecer la cookie en la Respuesta HTTP, la convierte en una cookie de sesión en lugar de una persistente.

Si realmente debe conservar el vencimiento, entonces podría establecer la fecha de vencimiento inicial como parte del valor de la cookie, luego cuando lea la cookie, analice el valor y establezca el nuevo vencimiento para que coincida.

Un ejemplo que no incluye ningún otro dato por lo que la cookie no es realmente útil - que tendría que serializarlo alguna manera con los datos reales que desee almacenar:

HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 
DateTime expires = DateTime.Now.AddYears(1); 

if (cookie == null) { 
    cookie = new HttpCookie(constantCookie); 
} else { 
    // cookie.Value would have to be deserialized if it had real data 
    expires = DateTime.Parse(cookie.Value); 
} 

cookie.Expires = expires; 
// save the original expiration back to the cookie value; if you want to store 
// more than just that piece of data, you would have to serialize this with the 
// actual data to store 
cookie.Value = expires.ToString(); 

HttpContext.Current.Response.Cookies.Set(cookie); 
+2

Buena respuesta, aunque no es solo ASP.NET que no inicializa la fecha de vencimiento: en general, la fecha de caducidad de las cookies es 'solo escritura' y no se publica en el servidor web en solicitudes http. – maxp

+0

Para mí, aunque en el lado del servidor, la cookie caduca, el valor no muestra el último valor establecido, pero el navegador almacena el valor correcto incluso si solo actualizo el valor de la cookie y no expira. –

+0

@mrbengi Esta publicación se refiere a las cookies. Ha publicado una nueva pregunta sobre cómo funciona el análisis de DateTime. Hay muchas fuentes para encontrar ayuda o hacer una nueva pregunta a través del enlace en la parte superior derecha de la página de StackOverflow. Pero tu comentario no se aplica a este tema. –

Cuestiones relacionadas