2012-08-24 18 views
23

Duplicar posibles:
Delete cookie on clicking sign out¿Cómo suprimir cookie de .Net

Quiero borrar cookies cuando el cierre de sesión de usuario.

Aquí está mi código:

if (HttpContext.Current.Request.Cookies["currentUser"] != null) 
{ 
    DeleteCookie(HttpContext.Current.Request.Cookies["currentUser"]); 
} 


     public void DeleteCookie(HttpCookie httpCookie) 
     { 
      try 
      { 
       httpCookie.Value = null; 
       httpCookie.Expires = DateTime.Now.AddMinutes(-20); 
       HttpContext.Current.Request.Cookies.Add(httpCookie); 
      } 
      catch (Exception ex) 
      { 
       throw (ex); 
      } 
     } 

Pero no funciona. ¿Tienes alguna sugerencia?

+0

Creo que no debe borrar el 'Valor'. AFAIK, así es como se identifica la cookie. –

+0

Tenga en cuenta que eliminar la cookie es solo una limpieza secundaria. La parte importante es invalidar el valor de la cookie en el lado del servidor. – CodesInChaos

Respuesta

48
HttpCookie currentUserCookie = HttpContext.Current.Request.Cookies["currentUser"]; 
HttpContext.Current.Response.Cookies.Remove("currentUser"); 
currentUserCookie.Expires = DateTime.Now.AddDays(-10); 
currentUserCookie.Value = null; 
HttpContext.Current.Response.SetCookie(currentUserCookie); 

Funciona.

+1

Sé que esta es una respuesta antigua, pero para los recién llegados, no creo que eliminar la cookie en primer lugar sirva para nada, ya que de todos modos se establece de nuevo más tarde. –

0

Agregue la cookie (con vencimiento anterior) a la colección HttpContext.Current.Response.Cookies en su lugar. La solicitud es para leer las cookies que se enviaron al servidor: la respuesta es para enviar las cookies al cliente.

14

En lugar de añadir la cookie, debe cambiar las galletas Response'sExpires a un valor en el pasado:

if (Request.Cookies["currentUser"] != null) 
{ 
    Response.Cookies["currentUser"].Expires = DateTime.Now.AddDays(-1); 
} 

Nota al margen: En lugar de throw ex sólo debe throw para mantenerlo es StackTrace. C#: Throwing Custom Exception Best Practices

+0

¿Por qué atrapar la excepción de todos modos si no se hace nada con ella? – Dykam

+0

Lo intenté pero no funciona. Todavía puedo ver el nombre de usuario después de cerrar la sesión. httpCookie.Expires = DateTime.Now.AddDays (-1); – cagin

+0

@Dykam: puede decidir más tarde si desea iniciar sesión o hacer lo que desee. A menudo agrego un 'TODO: implementar el registro 'allí en la primera versión. De esta forma, al menos ha agregado el try/catch para recordar que esto podría causar una excepción. –

0

Quizás pueda hacer uso de Response.Cookies.Clear() o Response.Cookies.Remove().

+0

No funciona. – cagin

+1

Lo siento ... hice una búsqueda rápida y encontré esto http://msdn.microsoft.com/en-us/library/ms178195.aspx Puede ser que esto sea útil para usted. –

+0

Como puede ver en mi pregunta, ya configuré el tiempo de caducidad de la cookie en pasado. Pero el mismo resultado. – cagin