Bagaimana cara menghapus cookie menggunakan jQuery?

90

Saya ingin menggunakan jQuery untuk menghapus cookie; Saya sudah mencoba ini:

$.cookie('name', '', { expires: -1 });

Namun saat saya menyegarkan halaman, cookie masih ada:

alert('name:' +$.cookie('name'));

Mengapa?

pengguna319854
sumber
beberapa browser akan menghapus cookie hanya setelah browser dimulai ulang.
Eboubaker

Jawaban:

146

Untuk menghapus cookie dengan JQuery, setel nilainya menjadi null:

$.cookie("name", null, { path: '/' });

Edit: Solusi terakhir adalah secara eksplisit menentukan pathproperti setiap kali mengakses cookie, karena OP mengakses cookie dari beberapa halaman di direktori yang berbeda, dan dengan demikian jalur default berbeda (ini tidak dijelaskan dalam pertanyaan asli). Solusinya ditemukan dalam diskusi di bawah ini, yang menjelaskan mengapa jawaban ini diterima - meskipun tidak benar.

Untuk beberapa versi cookie jQ, solusi di atas akan menyetel cookie ke string null. Jadi tidak menghapus cookie. Gunakan kode seperti yang disarankan di bawah ini.

$.removeCookie('the_cookie', { path: '/' });
Chadwick
sumber
Tapi dari sumber di sini: plugins.jquery.com/files/jquery.cookie.js.txt : if (value === null) { value = '';options.expires = -1;}, bahwa apa yang terjadi di dalam fungsi pengolahan, sehingga mereka seharusnya melakukan hal yang sama. (parameternya (name, value, options))
aularon
9
Apakah kode pengaturan cookie dan kode pengujian ada di halaman yang sama? Jika tidak, Anda harus secara eksplisit mengatur pathdi opsi untuk kedua perintah, karena defaultnya ke jalur halaman saat ini. Uji dengan menyetel ke root domain Anda di semua tempat di mana cookie dibaca dan ditulis:$.cookie('name', value, {path:'/'})
Chadwick
1
Chadwick> Mungkin Anda benar. Untuk exm. saya mengatur cookie di site.com, lalu masuk ke site.com/user, site.com/user/mod, site.com/user/mod/new dan saya ingin melihat cookie di semua halaman ini. Bagaimana path terlihat seperti ini: {path: '/'}?
pengguna319854
2
Kode ini tidak menghapus cookie, tetapi menetapkan nilai null.
Tomzan
12
-1 karena ini tidak benar-benar menghapus cookie. $.removeCookie('cookie_name')tidak.
Rosdi Kasim
71

Anda dapat mencoba ini:

$.removeCookie('the_cookie', { path: '/' });

sumber: https://github.com/carhartl/jquery-cookie#readme

Pemberontak Gert-Jan
sumber
Yah .. Saya baik-baik saja dengan itu
Cataclysm
Saat Anda menggunakan sub-domain, Anda mungkin juga harus menentukannya. Terutama karena periode di awal nama domain mungkin diperlukan (.www.example.com)
Alexis Wilke
Perhatikan, ini tidak berhasil untuk kami di mana kode perlu masuk ke fungsi lain untuk alasan apa pun. $ .cookie ('name', null) seperti di atas tampaknya lebih dapat diandalkan. Namun menghapus cookie ini mungkin berhasil untuk beberapa orang.
Ligemer
Ini sebenarnya jawaban sebenarnya!
Kalaschni
15

Anda juga dapat menghapus cookie tanpa menggunakan plugin jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
Jan Richter
sumber
4

ini adalah masalah kesalahpahaman tentang cookie. Browser mengenali nilai cookie tidak hanya untuk kunci juga membandingkan jalur opsi & domain. Jadi Browser mengenali nilai yang berbeda nilai cookie mana yang kuncinya adalah 'name' dengan opsi pengaturan server (path = '/'; domain = 'mydomain.com') dan kuncinya adalah 'name' tanpa opsi.

logan kim
sumber
1

Coba ini

 $.cookie('_cookieName', null, { path: '/' });

{Path: '/'} melakukan pekerjaan untuk Anda

Otto Kanellis
sumber
1

Bekerja untuk saya hanya jika pathdiatur, yaitu:

$.cookie('name', null, {path:'/'})
Andron
sumber
Downvoting menyebabkan Anda menyalin dan menempelkan jawaban saya sebagai milik Anda
Otto Kanellis
1
@OttoKanellis jadi saya sarankan untuk downwote jawaban yang diterima juga (karena itu diedit setelah jawaban saya) dan downvote jawaban Anda juga (karena Anda belum menyoroti pentingnya parameter path )!
Andron
-3

Apa yang Anda lakukan sudah benar, masalahnya ada di tempat lain, misalnya cookie disetel lagi entah bagaimana saat disegarkan.

aularon
sumber
4
Meskipun tautan ini mungkin menjawab pertanyaan, lebih baik menyertakan bagian penting dari jawaban di sini dan menyediakan tautan untuk referensi. Jawaban link saja bisa menjadi tidak valid jika halaman tertaut berubah.
Uri Agassi
Untuk jawaban ini, apa yang saya katakan adalah OP melakukannya dengan cara yang benar. Menyalin-tempel kode OP akan menjadi redundan, dan menambahkan kode lain akan membingungkan pembaca. Seseorang dapat menggulir ke atas dan melihat apa yang dilakukan OP, itu adalah "bagian penting" di sini. Namun, jika Anda merasa akan lebih baik untuk memasukkan sesuatu (tampaknya beberapa orang, lakukan ... Salah satu dari mereka malah memilih jawaban saya yang negatif :)), edit saja jawabannya dan perbaiki sesuai. Salam
aularon
Masalah dengan tautan adalah mereka cenderung "membusuk" - mereka berubah, mereka bergerak, mereka menghilang (contoh kasus - tautan Anda sudah mati!). Itulah mengapa kami lebih suka Anda mengutip teks yang relevan dari tautan bersama dengannya, sehingga jawaban Anda akan dimuat sendiri (lihat juga meta.stackexchange.com/questions/8231/… )
Uri Agassi
Saya sangat menyadari hal itu, tetapi sekali lagi: ini tidak terjadi di sini. Seluruh jawaban di atas dapat ditulis ulang sebagai "Apa yang Anda lakukan benar, masalahnya ada di tempat lain, misalnya cookie disetel lagi entah bagaimana saat disegarkan". Jadi, sekali lagi, busuk tautan adalah masalah, termasuk jawabannya sendiri di samping tautan adalah cara untuk pergi. Itu tidak relevan dengan jawaban ini.
aularon
Jadi berulang kali, jika sebuah jawaban mengandung satu tautan, dan tautan itu mati, bukan berarti jawabannya tidak cukup baik. Beberapa tautan hanya ada untuk memberikan detail tambahan, tetapi tidak diperlukan untuk kelengkapan jawabannya. Perilaku ini menurut saya seperti bot yang diprogram dengan buruk yang tidak memiliki NLP dasar untuk memahami tautan konteks yang diberikan. Anda mungkin harus berhenti melakukan ini.
aularon