2010-12-21 20 views
6

Quiero que mi cookie desaparezca cuando el usuario cierra su navegador. Ya he configurado algunas propiedades de aspecto prometedor, pero mis cookies vuelven a activarse incluso después de cerrar todo el navegador.Cómo crear una cookie http no persistente (en memoria) en C#?

HttpCookie cookie = new HttpCookie("mycookie", "abc"); 
cookie.HttpOnly = true; //Seems to only affect script access 
cookie.Secure = true; //Seems to affect only https transport 

¿Qué propiedad o método me falta para obtener una cookie en memoria?

Respuesta

2

Esta pregunta ha sido publicada en línea más de 1000 veces. La mejor forma de manejar el tiempo de espera de las cookies no persistentes con el navegador abierto es agregar un valor clave para el tiempo de espera. El código siguiente se utiliza para un valor de clave de identificación de usuario de inicio de sesión y seguridad de encriptación (no incluida) para la compatibilidad del navegador. No uso autenticación de formularios.

HttpCookie cookie = new HttpCookie(name); 
cookie.Values["key1"] = value; 
cookie.Values["key2"] = DateTime.Now.AddMinutes(70).ToString(); 
          //timeout 70 minutes with browser open 
cookie.Expires = DateTime.MinValue; 
cookie.Domain = ConfigurationManager.AppSettings["website_domain"]; 
System.Web.HttpContext.Current.Response.Cookies.Add(cookie); 

Al comprobar la clave de galletas valor de uso:

try 
{ 

DateTime dateExpireDateTime; 
dateExpireDateTime = DateTime.Parse(HttpContext.Current.Request.Cookies[name]["key2"]); 

if (DateTime.Now > dateExpireDateTime) 
{ 
//cookie key value timeout code 
} 
else 
{ 
//reset cookie 
} 

catch 
{ 
//clear cookie and redirect to log in page 
} 

he encontrado problemas de compatibilidad utilizando autenticación de formularios y Google Chrome.

1

Eche un vistazo a la variable ASP.NET Session. Esto persistirá dependiendo de su navegador y se puede configurar como "sin cookies" o con un tiempo de espera excedido.

http://msdn.microsoft.com/en-us/library/h6bb9cz9%28VS.71%29.aspx

+0

Esto no está realmente relacionada con mi pregunta. Imagínese si la sesión se deshabilitó y aún quería crear una cookie Http que se va cuando el navegador está cerrado/no está escrito en el disco, etc. Sin embargo, creo que algunas de las otras respuestas están en el camino correcto. – MatthewMartin

6
cookie.Expires = DateTime.MinValue; 

esta cookie caducará, tan pronto como se cierra el navegador.

7

Las cookies sin una caducidad expuesta explícitamente desaparecerán automáticamente una vez que la sesión de navegación termine.

Ahora, "sesión de navegación" significa diferentes cosas para diferentes navegadores. Para algunos navegadores, significa que todas las instancias del navegador están cerradas. Para algunos solo significa que las pestañas relevantes o el navegador original están cerrados.

En su prueba, asegúrese de cerrar CADA instancia del navegador antes de volver a abrir para buscar la cookie. Si continúa teniendo problemas, publique el nombre y la revisión del navegador.

4

Si no establece la propiedad Cookie.Expires, la cookie se configurará para caducar al final de la sesión del navegador.

2

cookie no se destruyen en el navegador se cerrará siTaken from here

HttpCookie cookie = new HttpCookie(name); 
cookie.Value = value; 
cookie.Expires = Convert.ToDateTime(“12/12/2008″); //*difference is here*// 
Response.Cookies.Add(cookie);} 

cookie se perdió en el navegador se cerrará si

 HttpCookie cookie = new HttpCookie(name); 
    cookie.Value = value; 
    Response.Cookies.Add(cookie);} 
+0

No completamente cierto, de nuevo basado en navegador. Ojalá los navegadores se reúnan y acuerden "cuando finalice una sesión del navegador". – GoldBishop

Cuestiones relacionadas