.Net

2012-08-24 26 views
23

gelen Olası Çoğalt çerezi nasıl silinir:
Delete cookie on clicking sign out.Net

ne zaman kullanıcı logout çerezleri silmek istediğiniz

.

İşte benim kodudur:

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); 
      } 
     } 

Ama çalışmıyor. Hiç önerin var mı?

+0

"Değeri" silmemeniz gerektiğine inanıyorum. AFAIK, çerez bu şekilde tanımlanmış. –

+0

Çerezin silinmesinin yalnızca ikinci bir temizleme olduğunu unutmayın. Önemli kısım, çerezin sunucu tarafında değerini geçersiz kılmaktadır. – CodesInChaos

cevap

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); 

Çalışıyor.

+1

Bunun eski bir cevap olduğunu biliyorum, ancak yeni gelenler için, cookie'leri ilk önce yararlı bir şey yapmanın hiç bir işe yaramadığını düşünmüyorum çünkü daha sonra yeniden ayarlanmış. –

0

Tanımlama bilgisi (geçmiş geçerlilik süresi ile birlikte) yerine HttpContext.Current.Response.Cookies koleksiyonuna ekleyin. İstek, sunucunun gönderildiği çerezleri okumak içindir - yanıt, müşteriye geri çerez göndermek içindir.

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

Sidenote:

14

yerine çerez ekleme, geçmişte bir değere Response's Çerezleri Expires değişmelidir yerine throw ex arasında sadece throw buna StackTrace var tutmak gerekir. C#: Throwing Custom Exception Best Practices

+0

Neden bununla bir şey yapılmazsa istisna yakalansın? – Dykam

+0

Denedim ama işe yaramıyor. Hala kullanıcı ismini çıkışından sonra görebilirim. httpCookie.Expires = DateTime.Now.AddDays (-1); – cagin

+0

@Dykam: Daha sonra oturum açmak veya istediğiniz şeyi yapmak için karar verebilirsiniz. İlk sürümde sık sık bir 'TODO: uygulama günlüğü' ekliyorum. Bu sayede, bir istisna meydana gelebileceğini hatırlamak için en azından deneme/yakalamayı eklediniz. –

0

Belki de Response.Cookies.Clear() veya Response.Cookies.Remove() öğesinden faydalanabilirsiniz.

+0

Çalışmıyor. – cagin

+1

Üzgünüm ... hızlı bir arama yaptım ve bu http://msdn.microsoft.com/en-us/library/ms178195.aspx adresini ziyaret edin Bu sizin için yararlı olabilir. –

+0

Sorgumda gördüğünüz gibi, çerezin son kullanma tarihini daha önceden ayarlamıştım. Ama aynı sonuç. – cagin