ASP.NET web sitesinde tanımlama bilgileri nasıl silinir


87

Web sitemde kullanıcı "Oturumu Kapat" düğmesini tıkladığında, Logout.aspx sayfası kodla birlikte yükleniyor Session.Clear().

ASP.NET/C# 'de bu, tüm tanımlama bilgilerini temizler mi? Veya web sitemin tüm çerezlerini kaldırmak için eklenmesi gereken başka bir kod var mı?

Yanıtlar:


150

Bunun gibi bir şey dene:

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

Ama kullanmak da mantıklı

Session.Abandon();

yanı sıra birçok senaryoda.


15
Session.AbandonASP.NET oturum tanımlama bilgisini temizler, ancak buradaki userID gibi elle ayarladığınız tanımlama bilgilerini temizlemeyecektir. Ve Cookies["whatever"]asla boş değildir; mevcut olmayan bir tane isterseniz çerçeve bir çerez oluşturacaktır.
Andomar

11
@Andomar, Cookies["whatever"]çerez olmadığında aslında boş döndürür! Bunun eski bir yorum olduğunu biliyorum ama diğer okuyucuların bu yorumla yanıltılmasını istemiyorum.
Nuno Agapito

6
Aynı zamanda , çereze bir Oturum süresinin dolmasına neden olacağı Expiresiçin DateTime.MinValue, bu, çerezi silmeden önce tarayıcının / sekmenin (tarayıcıya bağlı) kapanmasını bekleyeceği anlamına geldiği için, AYARLANMAMASI çok önemlidir .
Nashenas

7
@NunoAgapito Çok eski ama diğer kullanıcılar için, Çerezler ["her neyse"] "İstek" ten okursanız boş bir çerez döndürür ve "Yanıt" dan okursanız boş bir çerez döndürür.
Athiwat Chunlakhan

ancak bu yalnızca içeriği çerezden kaldırır, çerez hala en azından benim için tarayıcıda kalır
17'de

50

Hayır, Çerezler yalnızca her biri için Son kullanma tarihi ayarlanarak temizlenebilir .

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

Şu anda Session.Clear():

  • SessionKoleksiyondaki tüm anahtar / değer çiftleri kaldırılır. Session_Endolay olmadı.

Bu yöntemi oturum kapatma sırasında kullanırsanız, olay için şu Session.Abandonyöntemi de kullanmalısınız Session_End:

  • Oturum kimliğine sahip çerez (uygulamanız varsayılan olarak oturum kimliği deposu için çerez kullanıyorsa) silinir

Son kullanma tarihi hakkında, ama ifsatırın gerçekten çalışmadığına inanıyorum . Cookies["whatever"]Çerçeve ile bir çerez istediğinizde, yoksa bir çerez oluşturacaktır.
Andomar

@Andomar MSDN'den aldığım bu kod. RequestNesne çağırırsak bunun bir tanımlama bilgisi oluşturacağını sanmıyorum .
VMAtm

2
Aha, sadece Responsenesne için bir çerez oluşturuyor gibi görünüyor . İlginç :)
Andomar

3
Bu kod sadece tek bir satırda optimize edilebilir Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1). Burada sunucu, tarayıcıdan çerezi kaldırmasını isteyecektir. Tarayıcı, varsa onu kaldıracaktır.
shashwat

2
Evet benim için Response.Cookies.Add (myCookie) kısmına ihtiyacım vardı - onsuz her zaman / doğru çalışmıyor. Teşekkürler.
Christopher D. Emerson

28

Kullandığım şey bu:

    private void ExpireAllCookies()
    {
        if (HttpContext.Current != null)
        {
            int cookieCount = HttpContext.Current.Request.Cookies.Count;
            for (var i = 0; i < cookieCount; i++)
            {
                var cookie = HttpContext.Current.Request.Cookies[i];
                if (cookie != null)
                {
                    var expiredCookie = new HttpCookie(cookie.Name) {
                        Expires = DateTime.Now.AddDays(-1),
                        Domain = cookie.Domain
                    };
                    HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
                }
            }

            // clear cookies server side
            HttpContext.Current.Request.Cookies.Clear();
        }
    }

Çok teşekkürler! Ayrıca çerezin sunucu tarafını güncellememesi
sorunumdan

11

Ne yazık ki benim için "Sona Erme" ayarı her zaman çalışmadı. Çerez etkilenmedi.

Bu kod benim için çalıştı:

HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

"ASP.NET_SessionId"çerezin adı nerede . Bu, çerezi gerçekten silmez, ancak benim için yeterince yakın olan boş bir çerezle geçersiz kılar.


5

Diğerlerinin söylediği gibi Session.Abandon kullanılırken Session ID çerezinin kaldırılmadığını belirtmek isterim.

Bir oturumu terk ettiğinizde, oturum kimliği çerezi kullanıcının tarayıcısından kaldırılmaz. Bu nedenle, oturum terk edilir edilmez, aynı uygulamaya yönelik tüm yeni istekler aynı oturum kimliğini kullanacak ancak yeni bir oturum durumu örneğine sahip olacaktır. Aynı zamanda, kullanıcı aynı DNS etki alanı içinde başka bir uygulama açarsa, Abandon yöntemi bir uygulamadan çağrıldıktan sonra kullanıcı oturum durumunu kaybetmez.

Bazen oturum kimliğini yeniden kullanmak istemeyebilirsiniz. Bunu yaparsanız ve oturum kimliğini yeniden kullanmamanın sonuçlarını anlarsanız, bir oturumu terk etmek ve oturum kimliği çerezini temizlemek için aşağıdaki kod örneğini kullanın:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

Bu kod örneği, sunucudan oturum durumunu temizler ve oturum durumu tanımlama bilgisini null olarak ayarlar. Boş değer, çerezi tarayıcıdan etkili bir şekilde temizler.

http://support.microsoft.com/kb/899918


5

Şimdi 2018, yani ASP.NET Core'da yerleşik bir işlev var. Bir çerezi silmek için bu kodu deneyin:

if(Request.Cookies["aa"] != null)
{
    Response.Cookies.Delete("aa");
}
return View();

4

Parolayı asla tanımlama bilgisi olarak saklamamalısınız. Bir tanımlama bilgisini silmek için, gerçekten onu değiştirmeniz ve sona ermeniz gerekir. Onu gerçekten silemezsiniz, yani kullanıcının diskinden kaldıramazsınız.

İşte bir örnek:

HttpCookie aCookie;
    string cookieName;
    int limit = Request.Cookies.Count;
    for (int i=0; i<limit; i++)
    {
        cookieName = Request.Cookies[i].Name;
        aCookie = new HttpCookie(cookieName);
        aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday
        Response.Cookies.Add(aCookie); // overwrite it
    }

2

OP'nin Soru başlığını tüm çerezleri silmek olarak almak - "Web sitesindeki Çerezleri Sil"

Dave Domagala'dan kodla internette bir yerde karşılaştım. Dave'i Google Analytics çerezlerine de izin verecek şekilde düzenledim - bu, web sitesinde bulunan tüm çerezleri dolaştırdı ve hepsini sildi. (Geliştirici açısından - yeni kodu mevcut bir siteye güncellemek, siteyi yeniden ziyaret eden kullanıcıların sorunlarından kaçınmak için hoş bir dokunuştur).

Aşağıdaki kodu, önce çerezleri okumak, gerekli verileri tutmak ve ardından aşağıdaki döngü ile her şeyi temizledikten sonra çerezleri sıfırlamakla birlikte kullanıyorum.

Kod:

int limit = Request.Cookies.Count; //Get the number of cookies and 
                                   //use that as the limit.
HttpCookie aCookie;   //Instantiate a cookie placeholder
string cookieName;   

//Loop through the cookies
for(int i = 0; i < limit; i++)
{
 cookieName = Request.Cookies[i].Name;    //get the name of the current cookie
 aCookie = new HttpCookie(cookieName);    //create a new cookie with the same
                                          // name as the one you're deleting
 aCookie.Value = "";    //set a blank value to the cookie 
 aCookie.Expires = DateTime.Now.AddDays(-1);    //Setting the expiration date
                                                //in the past deletes the cookie

 Response.Cookies.Add(aCookie);    //Set the cookie to delete it.
}

Ekleme: Google Analytics Kullanıyorsanız

Yukarıdaki döngü / silme, site için TÜM çerezleri silecektir, bu nedenle Google Analytics kullanıyorsanız - bu, ziyaretçinin nereden geldiğini, hangi arama motorunun kullanıldığını, neleri takip ettiğini büyük olasılıkla __utmz çerezi bağlantının tıklandığı, hangi anahtar kelimenin kullanıldığı ve web sitenize erişildiğinde dünyanın neresinde oldukları.

Bu nedenle, bunu korumak için, çerez adı bilindikten sonra basit bir if ifadesi sarın:

... 
aCookie = new HttpCookie(cookieName);    
if (aCookie.Name != "__utmz")
{
    aCookie.Value = "";    //set a blank value to the cookie 
    aCookie.Expires = DateTime.Now.AddDays(-1);   

    HttpContext.Current.Response.Cookies.Add(aCookie);    
}

1

Bu eski bir konu olmasına rağmen, gelecekte birisinin hala çözüm arayışı içinde olup olmayacağını düşündüm.

HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);

Bu benim için hile yaptı.


0

Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)


0

Çerezleri silmek için son kullanma tarihini ayarlamalısınız

Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));

Çerez yoksa bu bir istisna oluşturmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.