2012-12-06 8 views
7

Sto tentando di eliminare un cookie, tuttavia non viene eliminato. Ecco il codice che cerco di usare.Eliminare il problema relativo ai cookie in C#

if (Request.Cookies["dcart"] != null) 
{ 
    Response.Write(Request.Cookies["dcart"].Expires); 
    // Response 1/1/0001 12:00:00 AM 

    Response.Write(Request.Cookies["dcart"].Value); 
    // Response 229884 

    HttpCookie myCookie = new HttpCookie("dcart"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    myCookie.Value = ""; 
    Response.Cookies.Add(myCookie); 
} 

Response.Write(Request.Cookies["dcart"].Expires); 
// Response 1/1/0001 12:00:00 AM 
Response.Write(Request.Cookies["dcart"].Value); 
// Response 229884 

Quando recupero nuovamente il cookie, non cambia nulla. Controllo w/FireFox e lo stesso comportamento di Chrome. Il punto interessante è che la data di scadenza viene visualizzata correttamente sui browser ma sul codice.

Ho provato a seguire e non ha funzionato.

  • Impostare la data di scadenza su (domani) e impostarla nuovamente per ieri.
  • riavviare il browser (accade diversi browser e persone)
  • Impostare il valore qualcosa
  • Usa HttpContext.Current.Request.Cookies [ "dcart"] ....
  • Request.Cookies [ "dcart" ] .Expires = DateTime.Now.AddYears (-10);

PS. Il codice non funzionerà direttamente sul tuo computer, perché non hai il cookie.

+0

Utilizzare Fiddler (o qualsiasi altro debugger HTTP) e verificare se il cookie è effettivamente inviato. Cioè potrebbe esserci una chiamata per rimuovere tutti i cookie dalla risposta prima che venga inviata ... –

+0

@DaveZych Request.Cookies ["dcart"]. Expires = DateTime.Now.AddYears (-10); non ha funzionato – asr

risposta

3

risolto

problema era il percorso. Il cookie che ho richiesto era in "/ store" e quello di I response path a "/".

if (Request.Cookies["dcart"] != null) 
{ 
    HttpCookie myCookie = new HttpCookie("dcart"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    myCookie.Path = "/store"; 
    Response.Cookies.Add(myCookie); 
} 

Quando ho aggiunto informazioni sul percorso, è stato eliminato.

Nota: ho utilizzato Firebug per tracciare il percorso del cookie.

+0

in chrome il percorso del cookie può essere facilmente trovato sotto chrome: // settings/cookies – Tomek

0

I cookie sono più complicati di quanto sembrino. Leggi questo per una chiara descrizione di come usare i cookie:

On The Care and Handling of Cookies

Per eliminare un cookie, secondo l'articolo collegato è necessario impostare semplicemente il tempo di scadenza a qualsiasi momento del passato, ma non usare DateTime.MinValue perché alcuni browser non gestiscono tale data in modo corretto:

Se si desidera eliminare il cookie sulla macchina client, non utilizzare il ovvio Response.Cookies.Remove ("MyCookie"), che dice semplicemente il cookie non sovrascrivere il cookie del client (vedi sotto per ulteriori spiegazione dettagliata), impostare la proprietà Expires del cookie in qualsiasi momento prima dell'ora corrente. Questo dirà al client di sovrascrivere il cookie corrente con un cookie scaduto e il client non invierà mai il numero al server.

Ancora una volta, la tentazione è di utilizzare DateTime.MinValue (01-Jan-0001 00:00:00) per eliminare un cookie; ancora, questo sarebbe un errore. Questo orario di , Netscape 7 funzionerà come previsto ma Internet Explorer 6 considera questo un caso eccezionale. Se Internet Explorer riceve un cookie con quella che considera una data di scadenza "vuota", conserverà il cookie fino a quando il browser non verrà chiuso e quindi scadrà .

Il modo più sicuro (e più simmetrico) per eliminare il cookie utilizzando una Data di scadenza di DateTime.Now.AddYears (-30).

cioè il metodo corretto è

Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-30); 
0

Questo link vi fornirà alcune risposte per voi:

https://msdn.microsoft.com/en-us/library/ms178195.aspx

Nel mio caso, appena finito di lavorare in localhost, ma, quando ho schierato al server il problema persisteva ...

In HttpCookie, puoi provare a impostare il parametro Scadenza DateTime.Now.AddDays(-1d), (Imposta la data di scadenza a ieri) e impostare la proprietà Secure = false.

Dopo questo, ha funzionato per me.