Cara menghapus cookie di situs web ASP.NET

87

Di situs web saya ketika pengguna mengklik tombol "Logout", halaman Logout.aspx memuat kode Session.Clear().

Di ASP.NET/C#, apakah ini menghapus semua cookie? Atau apakah ada kode lain yang perlu ditambahkan untuk menghapus semua cookie di situs web saya?

mengunci
sumber

Jawaban:

150

Cobalah sesuatu seperti itu:

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

Tapi itu juga masuk akal untuk digunakan

Session.Abandon();

selain itu dalam banyak skenario.

Kirill
sumber
15
Session.Abandonakan menghapus cookie sesi ASP.NET, tetapi bukan cookie yang Anda setel secara manual, seperti ID pengguna di sini. Dan Cookies["whatever"]tidak pernah nol; kerangka kerja akan membuat cookie jika Anda meminta cookie yang tidak ada.
Andomar
11
@Andomar, sebenarnya Cookies["whatever"]mengembalikan null jika cookie tidak ada! Saya tahu ini adalah komentar lama tetapi saya tidak ingin pembaca lain disesatkan oleh komentar ini.
Nuno Agapito
6
Ini juga sangat penting untuk ExpiresTIDAK disetel ke DateTime.MinValuekarena ini benar-benar akan memberikan cookie sebuah Sesi kedaluwarsa, yang berarti menunggu sampai browser / tab (tergantung browser) ditutup sebelum menghapus cookie.
Nashenas
7
@NunoAgapito Sangat tua tetapi untuk pengguna lain, Cookie ["apa pun"] mengembalikan nol jika Anda membaca dari "Permintaan" dan mengembalikan cookie kosong jika Anda membaca dari "Tanggapan".
Athiwat Chunlakhan
tetapi ini hanya menghapus konten dari cookie, cookie masih tetap ada di browser setidaknya untuk saya
Beingnin
50

Tidak, Cookies hanya dapat dibersihkan dengan menyetel tanggal Kedaluwarsa untuk masing-masing .

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

Pada saat Session.Clear():

  • Semua pasangan nilai kunci dari Sessionkoleksi dihapus. Session_Endacara tidak terjadi.

Jika Anda menggunakan metode ini selama logout, Anda juga harus menggunakan Session.Abandonmetode untuk Session_Endacara:

  • Cookie dengan ID Sesi (jika aplikasi Anda menggunakan cookie untuk penyimpanan ID sesi, yang secara default) dihapus
VMAtm
sumber
Benar tentang tanggal kadaluwarsa, tapi saya yakin ifgaris itu tidak benar-benar berfungsi. Saat Anda meminta cookie dengan Cookies["whatever"]framework akan membuat cookie jika tidak ada.
Andomar
@Andomar Kode ini saya dapatkan dari MSDN. Saya tidak berpikir bahwa itu akan membuat cookie jika kita memanggil Requestobjek.
VMAtm
2
Aha, sepertinya itu hanya membuat cookie untuk Responseobjeknya. Menarik :)
Andomar
3
Kode ini dapat dioptimalkan hanya dalam satu baris Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1). Disini server akan meminta browser untuk menghapus cookie. Browser akan menghapusnya jika ada.
shashwat
2
Ya bagi saya, saya membutuhkan bagian Response.Cookies.Add (myCookie) - tanpanya tidak selalu berfungsi / dengan benar. Terima kasih.
Christopher D. Emerson
28

Ini yang saya gunakan:

    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();
        }
    }
pixelbits
sumber
Terima kasih banyak! Juga singkirkan masalah saya bahwa cookie tidak akan memperbarui sisi server
Tom el Safadi
11

Sayangnya, bagi saya, menyetel "Kedaluwarsa" tidak selalu berhasil. Cookie tidak terpengaruh.

Kode ini berhasil untuk saya:

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

dimana "ASP.NET_SessionId"nama cookie tersebut. Ini tidak benar-benar menghapus cookie, tetapi menimpanya dengan cookie kosong, yang cukup dekat untuk saya.

Buh Buh
sumber
5

Saya hanya ingin menunjukkan bahwa cookie ID Sesi tidak dihapus saat menggunakan Session.Abandon seperti yang dikatakan orang lain.

Saat Anda meninggalkan sesi, cookie ID sesi tidak dihapus dari browser pengguna. Oleh karena itu, segera setelah sesi ditinggalkan, setiap permintaan baru ke aplikasi yang sama akan menggunakan ID sesi yang sama tetapi akan memiliki contoh status sesi baru. Pada saat yang sama, jika pengguna membuka aplikasi lain dalam domain DNS yang sama, pengguna tidak akan kehilangan status sesinya setelah metode Abaikan dipanggil dari satu aplikasi.

Terkadang, Anda mungkin tidak ingin menggunakan kembali ID sesi. Jika Anda melakukannya dan jika Anda memahami konsekuensi dari tidak menggunakan kembali ID sesi, gunakan contoh kode berikut untuk meninggalkan sesi dan untuk menghapus cookie ID sesi:

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

Contoh kode ini menghapus status sesi dari server dan menyetel cookie status sesi ke null. Nilai null secara efektif menghapus cookie dari browser.

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

MTs
sumber
5

Sekarang tahun 2018, jadi di ASP.NET Core, ada fungsi bawaan langsung. Untuk menghapus cookie, coba kode ini:

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

Anda tidak boleh menyimpan kata sandi sebagai cookie. Untuk menghapus cookie, Anda benar-benar hanya perlu mengubah dan mengakhirinya. Anda tidak dapat benar-benar menghapusnya, yaitu menghapusnya dari disk pengguna.

Berikut ini contohnya:

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
    }
Rajamohan Anguchamy
sumber
2

Mengambil judul Pertanyaan OP sebagai menghapus semua cookie - "Hapus Cookie di situs web"

Saya menemukan kode dari Dave Domagala di web di suatu tempat. Saya mengedit Dave untuk mengizinkan cookie Google Analytics juga - yang memutar semua cookie yang ditemukan di situs web dan menghapus semuanya. (Dari sudut pandang pengembang - memperbarui kode baru ke situs yang ada, adalah sentuhan yang bagus untuk menghindari masalah dengan pengguna yang mengunjungi kembali situs tersebut).

Saya menggunakan kode di bawah ini bersama-sama dengan membaca cookie terlebih dahulu, memegang data yang diperlukan - kemudian mengatur ulang cookie setelah mencuci semuanya bersih dengan loop di bawah ini.

Kode:

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.
}

Tambahan: Jika Anda Menggunakan Google Analytics

Loop / delete di atas akan menghapus SEMUA cookie untuk situs tersebut, jadi jika Anda menggunakan Google Analytics - mungkin berguna untuk menyimpan cookie __utmz karena cookie ini melacak dari mana pengunjung berasal, mesin pencari apa yang digunakan, apa link diklik, kata kunci apa yang digunakan, dan di mana mereka berada di dunia saat situs Anda diakses.

Jadi untuk mempertahankannya, bungkus pernyataan if yang sederhana setelah nama cookie diketahui:

... 
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);    
}
Martin Sansone - MiOEE
sumber
1

Meskipun ini adalah utas lama, saya pikir jika seseorang masih mencari solusi di masa depan.

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

Itulah triknya bagi saya.

Ahsan
sumber
0

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

Noman Chali
sumber
0

Anda harus menyetel tanggal kedaluwarsa untuk menghapus cookie

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

Ini tidak akan memunculkan pengecualian jika cookie tidak ada.

speyck
sumber