Hapus cookie berdasarkan nama?

151

Bagaimana saya bisa menghapus cookie tertentu dengan namanya roundcube_sessauth?

Bukankah seharusnya yang berikut ini:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

Lalu:

<a href="javascript:del_cookie(name);">KILL</a>

Bunuh roundcube_sessauthcookie?

Charlie
sumber
1
name? Apa gunanya itu? Atau itu hangover dari versi yang lebih fleksibel yang memungkinkan Anda menentukan nama cookie?
paxdiablo
Jangan berpikir itu adalah penipuan. Ini secara khusus menanyakan tentang menghapus semua cookie.
paxdiablo
1
Saya tidak ingin menghapus semua cookie ... Cukup satu. Saya menemukan kode dasar dari googling sekitar. Dan tentu saja saya mencobanya. @ Maxdiablo saya berasumsi karena menamai cookie, tapi saya mungkin benar-benar salah.
Charlie
@paxdiablo - ...How can I delete a specific cookie
Derek 朕 會 功夫
1
@ Derek et al, Anda tampaknya salah paham. Saya menyatakan bahwa dupe yang diusulkan dari Gabe sama sekali bukan dupe karena dupe yang diusulkan bertanya tentang menghapus semua cookie dan pertanyaan ini menanyakan tentang menghapus cookie tertentu . Saya tidak mengeluh tentang pertanyaan ini dengan cara apa pun, bentuk atau bentuk :-)
paxdiablo

Jawaban:

252

Anda harus menentukan jalur di mana cookie itu ada untuk memastikan bahwa Anda menghapus cookie yang benar.

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Jika Anda tidak menentukan jalurnya, browser akan menetapkan cookie relatif terhadap halaman yang sedang Anda kunjungi, jadi jika Anda menghapus cookie saat berada di halaman yang berbeda, cookie lainnya melanjutkan keberadaannya.

Edit berdasarkan komentar @Evan Morrison.
Perlu diketahui bahwa dalam beberapa kasus untuk mengidentifikasi cookie yang benar, Domaindiperlukan parameter.
Biasanya didefinisikan sebagai Domain=.yourdomain.com.
Menempatkan titik di depan nama domain Anda berarti bahwa cookie ini mungkin ada di setiap sub-domain ( wwwjuga dianggap sebagai sub-domain).

Juga, seperti disebutkan dalam jawaban @ RobertT, HttpOnlycookie tidak dapat dihapus dengan JavaScript di sisi klien.

emii
sumber
23
Ini membuatku gila! Setelah saya menambahkan Path = /, saya bisa menghapus. Terima kasih!
duyn9uyen
12
Ini harus menjadi jawaban yang benar, itu tidak akan berhasil tanpa Pathdalam banyak kasus.
SuperMarco
9
Saya tidak dapat menghapus cookie sampai saya menambahkan path dan nilai 'Domain = yang benar; '... Jadi pernyataan saya adalah: document.cookie = "cookieName =; path = /; kedaluwarsa = Kamis, 01 Januari 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison
1
Solusi ini masih berfungsi, tetapi dapat ditulis sedikit lebih ringkas dengan Max-Age=0, jika Anda peduli tentang hal-hal seperti itu.
MaxPRafferty
181

Untuk menghapus cookie, atur expirestanggal ke sesuatu di masa lalu. Suatu fungsi yang melakukan ini akan menjadi.

var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};

Kemudian untuk menghapus cookie bernama roundcube_sessauthlakukan saja.

delete_cookie('roundcube_sessauth');
paxdiablo
sumber
1
Saya merasa ini harusnya berfungsi (sepertinya harus bekerja: D!), Tapi saya melihat cookie yang ditetapkan oleh halaman saya di firefox dan ketika saya mengklik tombol "KILL", cookie tidak dihapus. Ada yang tahu kenapa?
Charlie
Ini berfungsi di Google Chrome. Instal pembakar dan lihat apakah ada kesalahan.
1
Tidak ada kesalahan, saya kira itu tidak menghapus cookie di Roundcube. Mungkin menghapus cookie lain dengan baik.
Charlie
39
Untuk pengguna yang mencari jawaban untuk pertanyaan ini, silakan lihat jawaban di bawah ini. The path=/kunci penting untuk kompatibilitas browser.
bencripps
2
Jawaban ini tidak berfungsi untuk saya di Chrome, belum mencobanya di Firefox. Tetapi jawaban emii di bawah ini berhasil.
Daniel F
11

// jika lulus exMins = 0 akan dihapus segera setelah dibuat.

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.
Kishor Patil
sumber
exMins tidak didefinisikan dalam contoh ini, Anda mungkin bermaksud exdays
bhurlow
Ya .. alih-alih ganti nama argumen menjadi exMins .. terima kasih #BhBh
Kishor Patil
7

Saya tidak begitu yakin apakah itu situasinya dengan versi Roundcube mulai Mei '12, tetapi untuk yang sekarang jawabannya adalah bahwa Anda tidak dapat menghapus roundcube_sessauthcookie dari JavaScript, karena ditandai sebagai HttpOnly. Dan ini berarti tidak dapat diakses dari kode sisi klien JS dan dapat dihapus hanya dengan skrip sisi server atau dengan tindakan pengguna langsung (melalui beberapa mekanisme browser seperti debugger terintegrasi atau beberapa plugin).

RobertT
sumber
1

Anda dapat mencoba solusi ini

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;
Nafees
sumber
0

Dalam kasus saya, saya menggunakan kode pukulan untuk lingkungan yang berbeda.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
Amir Movahedi
sumber