JQuery kullanarak bir çerez nasıl silinir?


90

Çerezleri silmek için jQuery kullanmak istiyorum; Bunu denedim:

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

Ancak sayfayı yenilediğimde, çerez hala orada:

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

Neden?


bazı tarayıcılar çerezi ancak tarayıcı yeniden başlatıldıktan sonra siler.
Eboubaker

Yanıtlar:


146

JQuery ile bir çerezi silmek için değeri null olarak ayarlayın:

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

Düzenleme: Nihai çözüm, pathtanımlama bilgisine her erişildiğinde özelliği açıkça belirtmektir , çünkü OP, tanımlama bilgisine farklı dizinlerdeki birden çok sayfadan erişir ve bu nedenle varsayılan yollar farklıdır (bu, orijinal soruda açıklanmamıştır). Çözüm, aşağıdaki tartışmada keşfedildi ve bu, doğru olmasa da bu cevabın neden kabul edildiğini açıklıyor.

Bazı jQ tanımlama bilgisi sürümleri için yukarıdaki çözüm tanımlama bilgisini dize null olarak ayarlayacaktır. Böylece çerezi kaldırmaz. Bunun yerine kodu aşağıda önerilen şekilde kullanın.

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

Ancak buradaki kaynaktan: plugins.jquery.com/files/jquery.cookie.js.txt : if (value === null) { value = '';options.expires = -1;}bu, işleme işlevinin içine girdiği için aynı şeyi gerçekleştirmeleri gerekiyor. (parametreler (name, value, options))
aularon

9
Çerez ayar kodu ve test kodu aynı sayfada mı? Aksi takdirde, pathvarsayılan olarak geçerli sayfanın yoluna ayarlandığından, seçeneklerde her iki komut için de açıkça ayarlamanız gerekir . Etki alanınızın kök dizinini hem çerezin okunduğu hem de yazıldığı her yerde ayarlayarak test edin:$.cookie('name', value, {path:'/'})
Chadwick

1
Chadwick> Belki haklısın. Exm için. site.com'da çerezleri ayarlıyorum, sonra site.com/user, site.com/user/mod, site.com/user/mod/new'e gidiyorum ve tüm bu sayfada çerezleri görmek istiyorum. Yol şöyle görünmelidir: {yol: '/'}?
user319854

2
Bu kod, çerezi kaldırmaz, ancak değerinde null değerini belirler.
Tomzan

12
-1 çünkü bu aslında çerezi kaldırmaz. $.removeCookie('cookie_name')yapar.
Rosdi Kasim

71

Bunu deneyebilirsiniz:

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

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


Evet .. Ben bununla iyiyim
Cataclysm

Bir alt alan kullandığınızda, bunu da belirtmeniz gerekebilir. Özellikle alan adının başındaki nokta gerekli olabileceği için (.www.example.com)
Alexis Wilke

Unutmayın, bu, kodun herhangi bir nedenle başka bir işleve girmesi gerektiğinde bizim için işe yaramadı. $ .cookie ('name', null) yukarıdaki gibi daha güvenilir görünüyor. Ancak bu çerez kaldırma bazı kişiler için işe yarayabilir.
Ligemer

Bu aslında gerçek cevap!
Kalaschni

15

Çerezleri jquery.cookie eklentisini kullanmadan da silebilirsiniz:

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

4

çerezin yanlış anlaşılma sorunudur. Tarayıcılar, sadece anahtarlar için değil, aynı zamanda seçenek yolunu ve etki alanını karşılaştırmak için çerez değerlerini tanır. Bu nedenle Tarayıcılar, sunucu ayarı seçeneğiyle (yol = '/'; etki alanı = 'alanım.com') ve anahtarın 'ad' olduğu ve hiçbir seçenek olmadan 'ad' olan çerez değerlerinin farklı değeri tanır.


1

Bunu dene

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

{Yol: '/'} işi sizin yerinize yapar


1

Benim için çalıştı sadece zaman pathkuruldu, yani:

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

Olumsuz oylama çünkü cevabımı sizinki gibi kopyalayıp yapıştırıyorsunuz
Otto Kanellis

1
@OttoKanellis, bu yüzden kabul edilen yanıtı da yazmanızı (çünkü cevabımdan sonra düzenlenmiştir) ve cevabınızı da (çünkü yol parametresinin önemini vurgulamamışsınızdır) öneriyorum !
Andron

-3

Yaptığınız şey doğrudur, sorun başka bir yerde, örneğin tanımlama bilgisi bir şekilde yenilenirken yeniden ayarlanıyor.


4
Bu bağlantı soruyu cevaplayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değişirse yalnızca bağlantı yanıtları geçersiz hale gelebilir.
Uri Agassi

Tam da bu cevap için söylüyorum, OP bunu doğru şekilde yapıyor. OP kodunu kopyalayıp yapıştırmak gereksiz olacaktır ve başka bir kod eklemek okuyucu için kafa karıştırıcı olacaktır. Yukarı kaydırıp OP'nin ne yaptığını görebilir, buradaki "önemli kısım" budur. Bununla birlikte, bir şeyi dahil etmenin daha iyi olacağını düşünüyorsanız (görünüşe göre bazı insanlar ... İçlerinden biri cevabımı bile reddetti :)), sadece cevabı düzenleyin ve buna göre düzeltin. Saygılarımızla
aularon

Bağlantılarla ilgili sorun, "çürümeye" yatkın olmalarıdır - değişirler, hareket ederler, kaybolurlar (noktasında - bağlantınız zaten ölmüştür!). Bu nedenle, ilgili metni onunla birlikte bağlantıdan alıntılamanızı tercih ediyoruz, böylece cevabınız bağımsız olacaktır (ayrıca bkz. Meta.stackexchange.com/questions/8231/… )
Uri Agassi

Bunun çok iyi farkındayım, ama yine: burada durum böyle değil. Yukarıdaki yanıtın tamamı "Yaptığınız şey doğru, sorun başka bir yerde, örneğin çerez bir şekilde yenilemede yeniden ayarlanıyor" şeklinde yeniden yazılabilir. Yani, yine, bağlantı çürümesi bir sorundur, bağlantının yanında cevabın kendisi de dahil olmak üzere gidilecek yol. Bu cevapla alakasız.
aularon

Dolayısıyla, bir cevap tek bir bağlantı içeriyorsa ve bu bağlantı kesilmişse, cevabın yeterince iyi olmadığı anlamına gelmez. Bazı bağlantılar yalnızca ek ayrıntılar sağlamak için mevcuttur, ancak yanıtın eksiksiz olması için gerekli değildir. Bu davranış bana, bağlam bağlantısının verildiğini anlamak için temel NLP'ye sahip olmayan kötü programlanmış bir bot gibi görünüyor. Muhtemelen bunu yapmayı bırakmalısınız.
aularon
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.