JavaScript ile tüm çerezleri temizleme


Yanıtlar:


318
function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

Bu kodun iki sınırlaması olduğunu unutmayın:

  • HttpOnlyBayrak, HttpOnlyJavascript'in çereze erişimini devre dışı bıraktığı için bayrak ayarlı çerezleri silmez .
  • Bir Pathdeğerle ayarlanmış çerezleri silmez . (Bu, çerezlerin görünmesine rağmen, ayarlandığı değeri document.cookiebelirtmeden silemezsiniz Path.)

5
Güzel bir tane, ancak denedikten sonra, bir sitenin = olmadan sadece bir çerez içerebileceğini buldum ve sonra isimsiz bir çerez, aslında değerini alıyorsunuz. Yani eqPos == 1 ise, name = ""adsız değeri silmek için bunu yapmalısınız .
PhiLho

59
Dikkat! Çerezleriniz bir yol veya alan adı bileşeni kullanacak şekilde yapılandırılmışsa, bu kullanışlı snippet çalışmaz.
Dan Fabulich

1
Doğru. Snippet, sizden bu ayrıntıları isteyecek şekilde değiştirilebilir; ancak bu çoğu durumda işe yarar.
Robert J. Walker

7
Bu, yolu veya etki alanı bilgilerini içerecek şekilde nasıl değiştirilir?
VUELA

2
En azından Chrome çerezleri ";" ile ayrılır, bu nedenle düzgün çalışması trim()için ek alana veya split('; ')(';' ile) gerekir. Bir düzenleme önerdim.
Daniel Kucal

124

Bir astar

Hızlı bir şekilde yapıştırmak istiyorsanız ...

document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });

Ve bir yer işaretinin kodu:

javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();

1
Bazı persistan web siteleri yedekleme çerezler localStorageSo window.localStorage.clear()yanı yararlı olabilir
Klesun

75

Ve işte tüm yollardaki ve alan adının tüm varyantlarındaki (www.alanadim.com, alanadim.com vb.) Tüm çerezleri silmek için bir tane:

(function () {
    var cookies = document.cookie.split("; ");
    for (var c = 0; c < cookies.length; c++) {
        var d = window.location.hostname.split(".");
        while (d.length > 0) {
            var cookieBase = encodeURIComponent(cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path=';
            var p = location.pathname.split('/');
            document.cookie = cookieBase + '/';
            while (p.length > 0) {
                document.cookie = cookieBase + p.join('/');
                p.pop();
            };
            d.shift();
        }
    }
})();

10
bu en iyi cevap olmalı
Kanan Farzali

3
Bu benim için kromda çalışıyor, kabul edilen cevap çalışmıyor
Orny

2
Parlak! Dev sunucumda çalışan ancak üretim sunucusunda olmayan birkaçını denedikten sonra, bu her ikisi üzerinde de ilk çalışıyordu. Saf altın!
Velojet

1
Bu benim için de kabul edilen cevaptan çok daha iyi çalışıyor. teşekkürler
guillaumepotier

Lider nokta ile etki alanı için kod eklemek zorunda kaldı, bazı çerezlerim var, bazı ilgili alt alan adları olmasa bile yok. Ancak bu değişikliklerle, şimdiye kadar denediğim en eksiksiz uygulama benim için iyi çalışıyor.
Blauelf

67

Bu kendimi biraz hayal kırıklığı sonra tüm yolları bir adlandırılmış çerez silmeye çalışacağım bu işlevi birlikte çaldı. Bunu çerezlerinizin her biri için arayın ve daha önce bulunduğunuz her çerezi silmeye daha yakın olmalısınız.

function eraseCookieFromAllPaths(name) {
    // This function will attempt to remove a cookie from all paths.
    var pathBits = location.pathname.split('/');
    var pathCurrent = ' path=';

    // do a simple pathless delete first.
    document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;';

    for (var i = 0; i < pathBits.length; i++) {
        pathCurrent += ((pathCurrent.substr(-1) != '/') ? '/' : '') + pathBits[i];
        document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;' + pathCurrent + ';';
    }
}

Her zaman olduğu gibi farklı tarayıcıların farklı davranışları vardır, ancak bu benim için çalıştı. Zevk almak.


@TomHammond, Bu tamamen yeni bir soru olmalı. Birincil sorunlar, barındırılan alanın ve barındırma alanının karşılaştırması ve barındırılan sayfayı kontrol etme yeteneğinizdir.
AnthonyVO

2
Bu hala httpOnly çerezlerini kaldırmayacaktır. Yalnızca HTTP üzerinden değiştirilebilirler.
Sunny R Gupta

14

Jquery.cookie eklentisine erişiminiz varsa, tüm çerezleri şu şekilde silebilirsiniz:

for (var it in $.cookie()) $.removeCookie(it);

Tüm çerezleri silen kendi web sitemde denedim. @Cerin sama, çerezleri temizlemeden önce ve sonra konsolda aşağıdaki kodu çalıştırmayı deneyebilir mi? "for ($ .cookie ()) console.log (it) 'de değiştirin;"
jichi

jichi jquery.cookie eklentisi ile birlikte jquery kütüphanesini eklediniz mi?
ko1Rn

11

Bildiğim kadarıyla alan adında herhangi bir çerez battaniye silmek için bir yolu yoktur. Adı biliyorsanız ve komut dosyası tanımlama bilgisiyle aynı alan adındaysa bir çerezi temizleyebilirsiniz.

Değeri boş olarak ve son kullanma tarihini geçmişte herhangi bir yere ayarlayabilirsiniz:

var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString(); 

Javascript kullanarak çerezleri manipüle etmek için mükemmel bir makale var .


11
Ayrıca sadece document.cookie="username;expires=" + new Date(0).toGMTString()- çerez 1 saniye önce veya 1970'de sona ererse çok fazla fark yok
matt b

Makale için teşekkürler!
tx291

7

Daha basit. Daha hızlı.

function deleteAllCookies() {
 var c = document.cookie.split("; ");
 for (i in c) 
  document.cookie =/^[^=]+/.exec(c[i])[0]+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";    
}

2
Yolları işlemez.
Scott Smith

6

Hem ikinci cevaptan hem de W3Schools'tan etkilenen bir cevap

document.cookie.split(';').forEach(function(c) {
  document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});

Çalışıyor gibi görünüyor

edit: wow neredeyse Stack Overflow onları yan yana koymak ilginç ilginç.

düzenleme: görünüşte geçici nvm


3

Çerezleri temizlemek için bu yöntemi paylaşacağımı düşündüm. Belki bir noktada başka biri için yararlı olabilir.

var cookie = document.cookie.split(';');

for (var i = 0; i < cookie.length; i++) {

    var chip = cookie[i],
        entry = chip.split("="),
        name = entry[0];

    document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

2

Document.cookie değişkenine bakarak bir liste alabilirsiniz. Hepsini temizlemek, hepsinin üzerinde döngü ve onları tek tek temizlemek meselesidir.


2

İlk oylanan cevabın neden işe yaramadığını bilmiyorum.

As Bu cevap şunları söyledi:

Tarayıcı çerezlerini silmek için% 100 çözüm yoktur.

Sorun, çerezlerin yalnızca anahtar "adları" ile değil "alan adları" ve "yolları" ile de benzersiz bir şekilde tanımlanmasıdır.

Bir çerezin "alan adını" ve "yolunu" bilmeden, onu güvenilir bir şekilde silemezsiniz. Bu bilgilere JavaScript'in document.cookie adresinden ulaşılamaz. HTTP Çerez başlığı üzerinden de mevcut değil!

Benim fikrim, çerezlerin ayarlanması, alınması ve kaldırılmasıyla birlikte bir Cookie sürüm kontrolü eklemektir:

var cookie_version_control = '---2018/5/11';

function setCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name+cookie_version_control + "=" + (value || "")  + expires + "; path=/";
}

function getCookie(name) {
    var nameEQ = name+cookie_version_control + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function removeCookie(name) {   
    document.cookie = name+cookie_version_control+'=; Max-Age=-99999999;';  
}

bu bana saatler kazandırdı. oyu hak ediyor. `` şimdi izin ver = yeni Tarih (0); `` let expireTime = now.getTime(); now.setTime(expireTime); document.cookie =document.cookie+';expires='+now.toUTCString()+';path=/'; çerezleri kaldırır.
CruelEngine

2

Daha sofistike ve OOP odaklı bir çerez kontrol modülüm var. Ayrıca deleteAllmevcut tüm çerezleri temizleme yöntemi de içerir . deleteAllYöntemin bu sürümünde, path=/geçerli etki alanındaki tüm çerezlerin silinmesine neden olan bir ayar bulunduğunu unutmayın. Çerezleri yalnızca bir kapsamdan silmeniz gerekiyorsa, bu yönteme dinamik pathparametrem eklemem için bu yöntemi yükseltmeniz gerekecektir .

Ana Cookiesınıf var:

import {Setter} from './Setter';

export class Cookie {
    /**
     * @param {string} key
     * @return {string|undefined}
     */
    static get(key) {
        key = key.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1');

        const regExp = new RegExp('(?:^|; )' + key + '=([^;]*)');
        const matches = document.cookie.match(regExp);

        return matches
            ? decodeURIComponent(matches[1])
            : undefined;
    }

    /**
     * @param {string} name
     */
    static delete(name) {
        this.set(name, '', { expires: -1 });
    }

    static deleteAll() {
        const cookies = document.cookie.split('; ');

        for (let cookie of cookies) {
            const index = cookie.indexOf('=');

            const name = ~index
                ? cookie.substr(0, index)
                : cookie;

            document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
        }
    }

    /**
     * @param {string} name
     * @param {string|boolean} value
     * @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
     */
    static set(name, value, opts = {}) {
        Setter.set(name, value, opts);
    }
}

Cookie setter method ( Cookie.set) oldukça karmaşık olduğundan diğer sınıfa ayrıştırdım. Bu kod var:

export class Setter {
    /**
     * @param {string} name
     * @param {string|boolean} value
     * @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
     */
    static set(name, value, opts = {}) {
        value = Setter.prepareValue(value);
        opts = Setter.prepareOpts(opts);

        let updatedCookie = name + '=' + value;

        for (let i in opts) {
            if (!opts.hasOwnProperty(i)) continue;

            updatedCookie += '; ' + i;

            const value = opts[i];

            if (value !== true)
                updatedCookie += '=' + value;
        }

        document.cookie = updatedCookie;
    }

    /**
     * @param {string} value
     * @return {string}
     * @private
     */
    static prepareValue(value) {
        return encodeURIComponent(value);
    }

    /**
     * @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
     * @private
     */
    static prepareOpts(opts = {}) {
        opts = Object.assign({}, opts);

        let {expires} = opts;

        if (typeof expires == 'number' && expires) {
            const date = new Date();

            date.setTime(date.getTime() + expires * 1000);

            expires = opts.expires = date;
        }

        if (expires && expires.toUTCString)
            opts.expires = expires.toUTCString();

        return opts;
    }
}

1

İşte JavaScript'teki tüm çerezleri silmek için basit bir kod .

function deleteAllCookies(){
   var cookies = document.cookie.split(";");
   for (var i = 0; i < cookies.length; i++)
     deleteCookie(cookies[i].split("=")[0]);
}

function setCookie(name, value, expirydays) {
 var d = new Date();
 d.setTime(d.getTime() + (expirydays*24*60*60*1000));
 var expires = "expires="+ d.toUTCString();
 document.cookie = name + "=" + value + "; " + expires;
}

function deleteCookie(name){
  setCookie(name,"",-1);
}

deleteAllCookies()Tüm çerezleri temizlemek için işlevi çalıştırın .


1

Fonksiyonel Yaklaşım + ES6

const cookieCleaner = () => {
  return document.cookie.split(";").reduce(function (acc, cookie) {
    const eqPos = cookie.indexOf("=");
    const cleanCookie = `${cookie.substr(0, eqPos)}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;`;
    return `${acc}${cleanCookie}`;
  }, "");
}

Not: Yolları işlemez


0
//Delete all cookies
function deleteAllCookies() {
    var cookies = document.cookie.split(";");
    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + '=;' +
            'expires=Thu, 01-Jan-1970 00:00:01 GMT;' +
            'path=' + '/;' +
            'domain=' + window.location.host + ';' +
            'secure=;';
    }
}

0

Birden çok çerez stilinde birden çok tarayıcı stilinde listelenen neredeyse hiç yöntemi test ettikten sonra, burada neredeyse hiçbir şeyin% 50 bile çalışmadığını buldum.

Lütfen gerektiği şekilde düzeltmeye yardımcı olun, ancak 2 sentimi buraya atacağım. Aşağıdaki yöntem her şeyi bozar ve temel olarak her iki ayar parçasına göre çerez değeri dizesini oluşturur ve /elbette başlayarak yol dizesinin adım adım derlemesini de içerir .

Umarım bu başkalarına yardımcı olur ve umarım herhangi bir eleştiri bu yöntemi mükemmelleştirmek şeklinde olabilir. İlk başta bazılarının aradığı gibi basit bir 1-astar istedim, ama JS çerezleri bu kadar kolay halledilmeyen şeylerden biri.

;(function() {
    if (!window['deleteAllCookies'] && document['cookie']) {
        window.deleteAllCookies = function(showLog) {
            var arrCookies = document.cookie.split(';'),
                arrPaths = location.pathname.replace(/^\//, '').split('/'), //  remove leading '/' and split any existing paths
                arrTemplate = [ 'expires=Thu, 01-Jan-1970 00:00:01 GMT', 'path={path}', 'domain=' + window.location.host, 'secure=' ];  //  array of cookie settings in order tested and found most useful in establishing a "delete"
            for (var i in arrCookies) {
                var strCookie = arrCookies[i];
                if (typeof strCookie == 'string' && strCookie.indexOf('=') >= 0) {
                    var strName = strCookie.split('=')[0];  //  the cookie name
                    for (var j=1;j<=arrTemplate.length;j++) {
                        if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
                        else {
                            var strValue = strName + '=; ' + arrTemplate.slice(0, j).join('; ') + ';';  //  made using the temp array of settings, putting it together piece by piece as loop rolls on
                            if (j == 1) document.cookie = strValue;
                            else {
                                for (var k=0;k<=arrPaths.length;k++) {
                                    if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
                                    else {
                                        var strPath = arrPaths.slice(0, k).join('/') + '/'; //  builds path line 
                                        strValue = strValue.replace('{path}', strPath);
                                        document.cookie = strValue;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            showLog && window['console'] && console.info && console.info("\n\tCookies Have Been Deleted!\n\tdocument.cookie = \"" + document.cookie + "\"\n");
            return document.cookie;
        }
    }
})();

Ya çalışmıyor, ya da en azından benim için ... Çerezleri HTTP ile silmek zorunda kaldım.
adelriosantiago

0

jQuery:

var cookies = $.cookie();
for(var cookie in cookies) {
$.removeCookie(cookie);
}

vanilya JS

function clearListCookies()
{   
 var cookies = document.cookie.split(";");
 for (var i = 0; i < cookies.length; i++)
  {   
    var spcook =  cookies[i].split("=");
    deleteCookie(spcook[0]);
  }
  function deleteCookie(cookiename)
   {
    var d = new Date();
    d.setDate(d.getDate() - 1);
    var expires = ";expires="+d;
    var name=cookiename;
    //alert(name);
    var value="";
    document.cookie = name + "=" + value + expires + "; path=/acc/html";                    
}
window.location = ""; // TO REFRESH THE PAGE
}

3
Bu, jQuery Cookie eklentisi gerektirir. jQuery kitaplığında çerez () işlevi yoktur.
Ruchira

-1

IE ve Edge'de bir sorun buldum. Webkit tarayıcıları (Chrome, safari) daha bağışlayıcı görünüyor. Çerezleri ayarlarken, her zaman "yolu" bir şey olarak ayarlayın, çünkü varsayılan, çerezi ayarlayan sayfa olacaktır. Dolayısıyla, "yolu" belirtmeden farklı bir sayfada sona erdirmeye çalışırsanız, yol eşleşmez ve süresi dolmaz. document.cookieEğer çerez değerine bakılarak yer aldığı kısma türetmek edemez böylece değer, bir çerez için yol veya son kullanma göstermez.

Farklı sayfalardan çerezlerin süresinin dolması gerekiyorsa, ayar sayfasının yolunu çerez değerine kaydedin, böylece daha sonra dışarı çekebilir veya her zaman "; path=/;"çerez değerine ekleyebilirsiniz . Sonra herhangi bir sayfadan sona erecek.

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.