जावास्क्रिप्ट के साथ सभी कुकीज़ साफ़ करना


जवाबों:


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";
    }
}

ध्यान दें कि इस कोड की दो सीमाएँ हैं:

  • यह HttpOnlyध्वज सेट के साथ कुकीज़ को नहीं हटाएगा, क्योंकि HttpOnlyध्वज कुकी में जावास्क्रिप्ट की पहुंच को अक्षम करता है।
  • यह उन कुकीज़ को नहीं हटाएगा जिन्हें Pathमूल्य के साथ सेट किया गया है । (यह इस तथ्य के बावजूद है कि वे कुकीज़ दिखाई देंगी document.cookie, लेकिन आप इसे उसी Pathमूल्य को निर्दिष्ट किए बिना नहीं हटा सकते हैं जिसके साथ इसे सेट किया गया था।)

5
एक अच्छा है, लेकिन प्रयोग करने के बाद, मैंने पाया कि एक साइट में बिना = केवल एक कुकी हो सकती है, और फिर यह एक नामी कुकी है, आपको वास्तव में इसका मूल्य मिलता है। तो अगर eqPos == 1, आपको name = ""इसके बजाय, अनमोल मान को मिटाने के लिए करना चाहिए ।
19

59
सावधान रहें! यदि आपके कुकीज़ को पथ या डोमेन घटक का उपयोग करने के लिए कॉन्फ़िगर किया गया है, तो यह आसान स्निपेट काम नहीं करेगा।
दान फ़ेबुलीच

1
सच। स्निपेट को आपको उन विवरणों के लिए पूछने के लिए संशोधित किया जा सकता है; लेकिन यह ज्यादातर मामलों के लिए काम करता है।
रॉबर्ट जे। वाकर

7
पथ या डोमेन जानकारी को शामिल करने के लिए इसे कैसे संशोधित किया जाएगा?
VUELA

2
कम से कम क्रोम कुकीज़ में "," द्वारा अलग किया जाता है, इसलिए हमें इसे ठीक से काम करने के trim()लिए अतिरिक्त स्थान या split('; ')(';') के पास रखना होगा। मैंने एक संपादन प्रस्तावित किया है।
डैनियल कुकल

124

एक लाइन

मामले में आप इसे जल्दी से चिपकाना चाहते हैं ...

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

और एक बुकमार्कलेट के लिए कोड:

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

1
कुछ सतत् वेब साइटों में बैकअप कुकीज़ localStorageतो window.localStorage.clear()साथ ही सहायक हो सकता है
Klesun

75

और यहां सभी रास्तों और डोमेन के सभी वेरिएंट (www.mydomain.com, mydomain.com आदि) में सभी कुकीज़ साफ़ करने के लिए एक है:

(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
इसका सबसे अच्छा उत्तर होना चाहिए
कानन फ़र्ज़ली

3
यह मेरे लिए क्रोम में काम करता है, जबकि स्वीकृत जवाब नहीं है
Orny

2
प्रतिभाशाली! कई अन्य लोगों की कोशिश करने के बाद, जिन्होंने मेरे देव सर्वर पर काम किया, लेकिन उत्पादन सर्वर पर नहीं, यह दोनों पर काम करने वाला पहला था। शुद्ध सोना!
वेलोजेट

1
यह मेरे लिए भी स्वीकृत उत्तर की तुलना में बहुत बेहतर है। धन्यवाद
गिलुम्पोटियर

प्रमुख डॉट के साथ डोमेन के लिए कोड जोड़ना था, मेरे कुछ कुकीज़ में यह है, कुछ नहीं, भले ही कोई प्रासंगिक उप डोमेन नहीं है। लेकिन उन परिवर्तनों के साथ, यह मेरे लिए अच्छी तरह से काम करता है, मैंने अब तक की सबसे पूर्ण कार्यान्वयन की कोशिश की है।
ब्लौफ

67

अपने आप में थोड़ी निराशा के बाद मैंने इस समारोह में एक साथ दस्तक दी, जो सभी रास्तों से एक नामित कुकी को हटाने का प्रयास करेगा। बस अपने प्रत्येक कुकी के लिए इसे कॉल करें और आपको प्रत्येक कुकी को हटाने के करीब होना चाहिए, तब आप पहले थे।

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

जैसा कि हमेशा अलग-अलग ब्राउज़रों का व्यवहार अलग-अलग होता है लेकिन यह मेरे लिए काम करता है। का आनंद लें।


@ टॉमहैंड, यह एक पूरी तरह से नया प्रश्न होना चाहिए। प्राथमिक मुद्दे होस्ट किए गए डोमेन बनाम होस्टिंग डोमेन और होस्ट किए गए पृष्ठ को नियंत्रित करने की आपकी क्षमता के आसपास हैं।
एंथनीवो

2
यह अभी भी httpOnly कुकीज़ को नहीं हटाएगा। उन्हें केवल HTTP पर संशोधित किया जा सकता है।
सनी आर गुप्ता

14

यदि आपके पास jquery.cookie प्लगइन तक पहुंच है , तो आप इस तरह से सभी कुकीज़ मिटा सकते हैं:

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

मैंने इसे केवल अपनी वेबसाइट पर आज़माया, जिसने सभी कुकीज़ हटा दीं। क्या @Cerin sama कुकीज़ को साफ़ करने से पहले और बाद में कंसोल में निम्न कोड को निष्पादित करने का प्रयास कर सकती है? "($ में यह .cookie ()) कंसोल.लॉग (इसे);"
जिची

jichi आपने jquery.cookie प्लगइन के साथ jquery लाइब्रेरी को शामिल किया है?
ko1Rn

11

जहाँ तक मुझे पता है कि डोमेन पर किसी भी कुकी सेट को खाली करने का कोई तरीका नहीं है। आप कुकी को साफ़ कर सकते हैं यदि आप नाम जानते हैं और यदि स्क्रिप्ट कुकी के समान डोमेन पर है।

आप मान को खाली करने के लिए और समाप्ति तिथि को अतीत में कहीं पर सेट कर सकते हैं:

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

जावास्क्रिप्ट का उपयोग करके कुकीज़ में हेरफेर करने पर यहां एक उत्कृष्ट लेख है


11
आप सिर्फ document.cookie="username;expires=" + new Date(0).toGMTString()इतना भी कर सकते हैं - अगर कुकी 1 सेकंड पहले या 1970 में समाप्त हो जाए तो ज्यादा अंतर नहीं है
मैट बी

लेख के लिए आपको धन्यवाद!
tx291


6

एक उत्तर यहाँ और W3Schools दोनों के दूसरे उत्तर से प्रभावित है

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

काम करने लगता है

संपादित करें: वाह लगभग Zach के दिलचस्प के रूप में ही कैसे ढेर अतिप्रवाह उन्हें एक दूसरे के बगल में डाल दिया।

संपादित करें: nvm जो कि अस्थायी रूप से अस्थायी था


3

मुझे लगा कि कुकीज़ साफ़ करने के लिए यह विधि साझा करूँगा। शायद यह किसी बिंदु पर किसी और के लिए सहायक हो सकता है।

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

आप डॉक्यूमेंट को देख सकते हैं। उन सभी को साफ़ करना केवल उन सभी पर नियंत्रण करना और उन्हें एक-एक करके साफ़ करना है।


2

मुझे नहीं पता कि पहला मतदान जवाब मेरे लिए काम क्यों नहीं करता है।

जैसा कि इस उत्तर ने कहा:

ब्राउज़र कुकीज़ को हटाने के लिए कोई 100% समाधान नहीं है।

समस्या यह है कि कुकीज़ को केवल उनके "नाम" से नहीं बल्कि उनके "डोमेन" और "पथ" द्वारा विशिष्ट रूप से पहचाना जाता है।

कुकी के "डोमेन" और "पथ" को जाने बिना, आप इसे मज़बूती से हटा नहीं सकते। यह जानकारी जावास्क्रिप्ट डॉक्यूमेंट.कॉकी के माध्यम से उपलब्ध नहीं है। यह HTTP कुकी हेडर के माध्यम से भी उपलब्ध नहीं है!

इसलिए मेरा विचार कुकी के पूर्ण नियंत्रण के साथ कुकी के संस्करण को जोड़ना, प्राप्त करना, हटाना है:

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

इसने मुझे घंटों बचाया। उत्थान के योग्य है। `` अब जाने दो = नई तिथि (0); `` let expireTime = now.getTime(); now.setTime(expireTime); document.cookie =document.cookie+';expires='+now.toUTCString()+';path=/'; कुकीज़ हटा दी जाएगी।
क्रुएलजाइन

2

मेरे पास कुछ अधिक परिष्कृत और ओओपी-उन्मुख कुकी नियंत्रण मॉड्यूल है। इसमें deleteAllसभी मौजूदा कुकी को साफ़ करने की विधि भी शामिल है । ध्यान दें कि deleteAllविधि के इस संस्करण में सेटिंग है path=/जो वर्तमान डोमेन के भीतर सभी कुकीज़ को हटाने का कारण बनता है। यदि आपको केवल कुछ दायरे से कुकीज़ को हटाने की आवश्यकता है, तो आपको इस विधि को इस विधि में मेरे गतिशील pathपैरामीटर को अपग्रेड करना होगा।

मुख्य Cookieवर्ग है:

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.set) बल्कि जटिल है इसलिए मैंने इसे अन्य वर्ग में विघटित कर दिया। इस एक का कोड है:

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

यहाँ जावास्क्रिप्ट में सभी कुकीज़ को हटाने के लिए एक सरल कोड है ।

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()सभी कुकी साफ़ करने के लिए फ़ंक्शन चलाएँ ।


1

कार्यात्मक दृष्टिकोण + 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}`;
  }, "");
}

नोट: पथ संभाल नहीं है


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

कुकीज़ की कई शैलियों पर ब्राउज़रों की कई शैली में सूचीबद्ध लगभग कभी विधि का परीक्षण करने के बाद, मैंने पाया कि यहां लगभग कुछ भी नहीं 50% काम करता है।

कृपया आवश्यकतानुसार सही मदद करें, लेकिन मैं अपने 2 सेंट यहाँ फेंकने जा रहा हूँ। निम्नलिखित विधि सब कुछ तोड़ देती है और मूल रूप से दोनों सेटिंग्स टुकड़ों के आधार पर कुकी मान स्ट्रिंग बनाता है, साथ ही पथ स्ट्रिंग के चरण निर्माण द्वारा एक कदम भी शामिल है, जिसके साथ शुरू होता है/ पाठ्यक्रम के है।

आशा है कि यह दूसरों की मदद करता है और मुझे आशा है कि कोई भी आलोचना इस पद्धति को पूर्ण करने के रूप में आ सकती है। सबसे पहले मैं एक साधारण-लाइनर चाहता था जैसा कि कुछ अन्य लोग चाहते थे, लेकिन जेएस कुकीज़ उन चीजों में से एक है जो इतनी आसानी से निपटा नहीं जाती हैं।

;(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;
        }
    }
})();

या तो काम नहीं कर रहा है, या कम से कम मेरे लिए नहीं ... मुझे HTTP द्वारा कुकीज़ को हटाना पड़ा।
adelriosantiago

0

jQuery:

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

वेनिला जेएस

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
इसके लिए jQuery कुकी प्लगइन की आवश्यकता होती है। jQuery लाइब्रेरी में कुकी () फ़ंक्शन नहीं है।
रूचिरा

-1

मुझे IE और एज में एक समस्या मिली। वेबकिट ब्राउज़र (क्रोम, सफारी) अधिक क्षमा करने वाले लगते हैं। कुकीज़ सेट करते समय, हमेशा "पथ" को किसी चीज़ पर सेट करें, क्योंकि डिफ़ॉल्ट पेज होगा जो कुकी सेट करता है। इसलिए यदि आप "पथ" को निर्दिष्ट किए बिना किसी भिन्न पृष्ठ पर इसे समाप्त करने का प्रयास करते हैं, तो पथ मेल नहीं खाएगा और यह समाप्त नहीं होगा। document.cookieमूल्य, एक कुकी के लिए पथ या समाप्ति प्रदर्शित नहीं करता है तो आप प्राप्त नहीं सकता, जिसमें कुकी मूल्य को देखकर किया गया था।

यदि आपको विभिन्न पृष्ठों से कुकीज़ को समाप्त करने की आवश्यकता है, तो सेटिंग पृष्ठ के पथ को कुकी मान में सहेजें ताकि आप इसे बाद में बाहर निकाल सकें या हमेशा "; path=/;"कुकी मान पर जोड़ सकें । फिर यह किसी भी पेज से समाप्त हो जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.