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?


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: '/' });

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


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

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.


1

Coba ini

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

{Path: '/'} melakukan pekerjaan untuk Anda


1

Bekerja untuk saya hanya jika pathdiatur, yaitu:

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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.