จะลบคุกกี้ได้อย่างไร


338

ฟังก์ชั่นการสร้างคุกกี้ของฉันถูกต้องหรือไม่? ฉันจะลบคุกกี้ที่จุดเริ่มต้นของโปรแกรมได้อย่างไร จะมีการเข้ารหัสง่าย ๆ ?

function createCookie(name,value,days)
function setCookie(c_name,value,1) {
  document.cookie = c_name + "=" +escape(value);
}

setCookie('cookie_name',mac);

function eraseCookie(c_name) {
  createCookie(cookie_name,"",-1);
}

1
w3schools มีฟังก์ชั่นที่ดีสำหรับคุกกี้ที่w3schools.com/js/js_cookies.asp คุณสามารถใช้setCookie('name', 'value', 0)เพื่อลบคุกกี้
Pete

คำตอบ:


341

ลองสิ่งนี้:

function delete_cookie( name, path, domain ) {
  if( get_cookie( name ) ) {
    document.cookie = name + "=" +
      ((path) ? ";path="+path:"")+
      ((domain)?";domain="+domain:"") +
      ";expires=Thu, 01 Jan 1970 00:00:01 GMT";
  }
}

หรือ:

function delete_cookie( name ) {
  document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

คุณสามารถกำหนดget_cookie()เช่นนี้:

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}

2
ฉันจะตั้งค่าฟังก์ชันอย่างไรและตรวจสอบว่าคุกกี้ของฉันคืออะไรและหมดอายุหรือไม่
เคนเนดี

61
get_cookie ไม่ได้ถูกกำหนด
Kreker

9
รุ่นที่สองของการทำงานไม่ทำงานดู jsfiddle jsfiddle.net/b27Lgxgf/1 แนวทางในการทำงานของผู้ประกาศข่าวของ @Luca
Tasos K.

6
สิ่งนี้ควรจะทำงานอย่างไร JavaScript ไม่มีget_cookie()ฟังก์ชันในตัว
MichałPerłakowski

4
@ MichałPerłakowskiฉันค่อนข้างแน่ใจว่ามันมีความหมายเพียงเพื่อเป็นตัวยึดตำแหน่ง / อ้างอิงถึงฟังก์ชั่นจริงที่คุณจะกำหนดที่อื่น
JSeligsohn

114

นี่คือการเชื่อมโยงที่ดีในquirksmode

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 + "=" + (value || "")  + expires + "; path=/";
}
function getCookie(name) {
    var nameEQ = name + "=";
    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 eraseCookie(name) {   
    document.cookie = name+'=; Max-Age=-99999999;';  
}


4
หมายเหตุ: ในกรณีที่ไม่ทำงานตรวจสอบให้แน่ใจว่าpathถูกต้อง ดู: developers.google.com/web/tools/chrome-devtools/manage-data/
......

ควรเพิ่มโดเมน
Michael Kapustey

3
นอกจากนี้ยังมีข้อสังเกตว่าทั้งพา ธและโดเมนจำเป็นต้องมีค่าที่ถูกต้อง
Esko

ผ่านการทดสอบทำงานได้อย่างสมบูรณ์แบบแม้ใน WKWebView ก่อนที่จะโหลดหน้าเว็บ แก้ปัญหาได้ดี
PashaN

32

จะใช้งานได้ไหม

function eraseCookie(name) {
    document.cookie = name + '=; Max-Age=0'
}

ฉันรู้ว่าMax-Ageทำให้คุกกี้เป็นคุกกี้เซสชันใน IE เมื่อสร้างคุกกี้ ไม่แน่ใจว่ามันทำงานอย่างไรเมื่อลบคุกกี้


17

นี่คือการใช้งานฟังก์ชั่นคุกกี้ลบด้วยการสนับสนุน unicode จาก Mozilla:

function removeItem(sKey, sPath, sDomain) {
    document.cookie = encodeURIComponent(sKey) + 
                  "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + 
                  (sDomain ? "; domain=" + sDomain : "") + 
                  (sPath ? "; path=" + sPath : "");
}

removeItem("cookieName");

หากคุณใช้ AngularJs ให้ลองใช้$ cookies.remove (ด้านล่างจะใช้วิธีการที่คล้ายกัน):

$cookies.remove('cookieName');

17

คุณสามารถทำได้โดยกำหนดวันหมดอายุเมื่อวานนี้

การตั้งค่าเป็น "-1" ไม่ทำงาน ที่ทำเครื่องหมายคุกกี้เป็น Sessioncookie


ตัวอย่างของคุณใช้ไม่ได้หากคุณตั้งค่าคุกกี้ในหน้าอื่นและลองลบออกจากหน้าอื่น ชุดทำงาน แต่ไม่สามารถลบได้
chovy

2
ฉันลงเอยด้วยการใช้สิ่งนี้: github.com/carhartl/jquery-cookieและคุณต้องลบโดยใช้เส้นทาง: '/'
chovy

นี่เป็นวิธีที่ดียกเว้น ... เพียงแค่กำหนดเวลาหมดอายุเป็นศูนย์ นั่นจะทำให้เกิดการหมดอายุทันทีและไม่สับสนกับใคร ("ทำไมนักพัฒนาถึงกำหนดเวลาหมดอายุเมื่อวานนี้? นั่นเป็นข้อผิดพลาดหรือไม่พวกเขาต้องการช่วงชีวิตหนึ่งวัน") เขียนโค้ดเพื่อให้เข้าใจได้ง่ายขึ้นและชีวิตของคุณจะสับสนน้อยลง นี่เป็นปรัชญาที่ไม่คุ้มค่าในการเขียนรหัสทุกวันนี้ ... แม้แต่ MDN ก็แนะนำให้ตั้งค่าเวลาหมดอายุเป็นศูนย์เพื่อลบคุกกี้
dudewad

10

หากต้องการลบคุกกี้ฉันตั้งค่าอีกครั้งด้วยค่าว่างและหมดอายุใน 1 วินาที ในรายละเอียดฉันมักจะใช้หนึ่งในรสชาติต่อไปนี้ (ฉันมักจะชอบรสชาติที่สอง):

1

    function setCookie(key, value, expireDays, expireHours, expireMinutes, expireSeconds) {
        var expireDate = new Date();
        if (expireDays) {
            expireDate.setDate(expireDate.getDate() + expireDays);
        }
        if (expireHours) {
            expireDate.setHours(expireDate.getHours() + expireHours);
        }
        if (expireMinutes) {
            expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
        }
        if (expireSeconds) {
            expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
        }
        document.cookie = key +"="+ escape(value) +
            ";domain="+ window.location.hostname +
            ";path=/"+
            ";expires="+expireDate.toUTCString();
    }

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

การใช้งาน:

setCookie("reminder", "buyCoffee", null, null, 20);
deleteCookie("reminder");

2

    function setCookie(params) {
        var name            = params.name,
            value           = params.value,
            expireDays      = params.days,
            expireHours     = params.hours,
            expireMinutes   = params.minutes,
            expireSeconds   = params.seconds;

        var expireDate = new Date();
        if (expireDays) {
            expireDate.setDate(expireDate.getDate() + expireDays);
        }
        if (expireHours) {
            expireDate.setHours(expireDate.getHours() + expireHours);
        }
        if (expireMinutes) {
            expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
        }
        if (expireSeconds) {
            expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
        }

        document.cookie = name +"="+ escape(value) +
            ";domain="+ window.location.hostname +
            ";path=/"+
            ";expires="+expireDate.toUTCString();
    }

    function deleteCookie(name) {
        setCookie({name: name, value: "", seconds: 1});
    }

การใช้งาน:

setCookie({name: "reminder", value: "buyCoffee", minutes: 20});
deleteCookie("reminder");

8

โซลูชันอื่น ๆ บางอย่างอาจไม่ทำงานหากคุณสร้างคุกกี้ด้วยตนเอง

นี่เป็นวิธีที่รวดเร็วในการลบคุกกี้:

document.cookie = 'COOKIE_NAME=; Max-Age=0; path=/; domain=' + location.host;

6

ฉันมีปัญหาในการลบคุกกี้ที่ทำผ่าน JavaScript และหลังจากฉันเพิ่มโฮสต์แล้วก็ใช้งานได้ (เลื่อนรหัสด้านล่างไปทางขวาเพื่อดูlocation.host) หลังจากล้างคุกกี้ในโดเมนลองทำตามวิธีต่อไปนี้เพื่อดูผลลัพธ์:

if (document.cookie.length==0)
{
 document.cookie = 'name=example; expires='+new Date((new Date()).valueOf()+1000*60*60*24*15)+'; path=/; domain='+location.host;

 if (document.cookie.length==0) {alert('Cookies disabled');}
 else
 {
  document.cookie = 'name=example; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain='+location.host;

  if (document.cookie.length==0) {alert('Created AND deleted cookie successfully.');}
  else {alert('document.cookies.length = '+document.cookies.length);}
 }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.