ลบคุกกี้ตามชื่อหรือไม่


151

ฉันจะลบคุกกี้เฉพาะที่มีชื่อได้roundcube_sessauthอย่างไร

ไม่ควรทำสิ่งต่อไปนี้:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

แล้ว:

<a href="javascript:del_cookie(name);">KILL</a>

ฆ่าroundcube_sessauthคุกกี้หรือไม่


1
name? ประเด็นคืออะไร หรือเป็นอาการเมาค้างจากเวอร์ชันเอนกประสงค์ที่อนุญาตให้คุณระบุชื่อคุกกี้ได้
paxdiablo

อย่าคิดว่าเป็นคนหลอกลวง มันถามเฉพาะเกี่ยวกับการล้างคุกกี้ทั้งหมด
paxdiablo

1
ฉันไม่ต้องการลบคุกกี้ทั้งหมด ... เพียงอันเดียว ฉันพบรหัสพื้นฐานจาก googling รอบ ๆ และแน่นอนฉันพยายาม @Paxdiablo ฉันคิดว่ามันตั้งชื่อคุกกี้ แต่ฉันอาจจะผิดอย่างสมบูรณ์
Charlie

@paxdiablo - ...How can I delete a specific cookie
Derek 朕會功夫

1
@ ดีเร็กและคุณดูเหมือนจะเข้าใจผิด ฉันกำลังระบุว่าการล่อลวงที่เสนอมาจาก Gabe ไม่ใช่การล่อลวงเลยเพราะผู้ล่อที่เสนอขอให้ถามเกี่ยวกับการลบคุกกี้ทั้งหมดและคำถามนี้ถามเกี่ยวกับการลบคุกกี้ที่เฉพาะเจาะจง ฉันไม่ได้บ่นเกี่ยวกับคำถามนี้ไม่ว่าในทางใดรูปร่างหรือรูปแบบ :-)
paxdiablo

คำตอบ:


252

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

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

หากคุณไม่ได้ระบุเส้นทางเบราว์เซอร์จะตั้งค่าคุกกี้ที่สัมพันธ์กับหน้าเว็บที่คุณเปิดอยู่ดังนั้นหากคุณลบคุกกี้ขณะที่อยู่ในหน้าอื่นคุกกี้อื่น ๆ จะยังคงอยู่ต่อไป

แก้ไขตามความคิดเห็นของ @Evan Morrison
โปรดทราบว่าในบางกรณีเพื่อระบุคุกกี้ที่Domainถูกต้องจำเป็นต้องมีพารามิเตอร์ โดยปกติก็กำหนดให้เป็น
การวางจุดไว้ด้านหน้าชื่อโดเมนของคุณหมายความว่าคุกกี้นี้อาจมีอยู่ในโดเมนย่อยใด ๆ ( นับเป็นโดเมนย่อยด้วย) Domain=.yourdomain.com
www

นอกจากนี้ตามที่ระบุไว้ในคำตอบของ @ RobertT HttpOnlyคุกกี้ไม่สามารถลบด้วย JavaScript ในฝั่งไคลเอ็นต์


23
นี่ทำให้ฉันบ้า! หลังจากที่ฉันเพิ่ม Path = / ฉันสามารถลบได้ ขอบคุณ!
duyn9uyen

12
นี่ควรเป็นคำตอบที่ถูกต้อง แต่ก็ไม่ได้ผลหากไม่มีPathกรณีส่วนใหญ่
SuperMarco

9
ฉันไม่สามารถลบคุกกี้ได้จนกว่าฉันจะเพิ่มทั้งเส้นทางและค่า 'โดเมน = ที่ถูกต้อง; '... ดังนั้นคำสั่งของฉันคือ: document.cookie = "cookieName =; path = /; หมดอายุ = Thu, 01 Jan 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison

1
วิธีการแก้ปัญหานี้ยังคงใช้งานได้ แต่สามารถเขียนได้กระชับขึ้นเล็กน้อยMax-Age=0หากคุณใส่ใจกับสิ่งเหล่านี้
MaxPRafferty

181

ในการลบคุกกี้ตั้งexpiresวันที่เป็นบางสิ่งในอดีต ฟังก์ชั่นที่ทำสิ่งนี้จะเป็น

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

จากนั้นเพื่อลบคุกกี้ที่ชื่อว่าroundcube_sessauthเพิ่งทำ

delete_cookie('roundcube_sessauth');

1
ฉันรู้สึกว่ามันน่าจะใช้งานได้ (ดูเหมือนว่ามันจะทำงานได้: D!) แต่ฉันกำลังดูคุกกี้ที่หน้าของฉันตั้งไว้ใน Firefox และเมื่อฉันคลิกปุ่ม "ฆ่า" คุกกี้จะไม่ถูกลบ มีความคิดอะไรไหม
Charlie

ใช้งานได้ใน Google Chrome ติดตั้ง firebug และดูว่ามีข้อผิดพลาดหรือไม่

1
ไม่มีข้อผิดพลาดฉันเดาว่ามันไม่ได้เป็นการลบคุกกี้ใน Roundcube มันอาจลบคุกกี้อื่น ๆ ได้ดี
Charlie

39
สำหรับผู้ใช้ที่ค้นหาคำตอบสำหรับคำถามนี้โปรดดูคำตอบด้านล่าง path=/ที่สำคัญเป็นสิ่งสำคัญสำหรับการทำงานร่วมกันเบราว์เซอร์
bencripps

2
คำตอบนี้ไม่ได้ผลสำหรับฉันบน Chrome ไม่ได้ลองใน Firefox แต่คำตอบของ emii ด้านล่างใช้งานได้
Daniel F

11

// ถ้าผ่าน exMins = 0 มันจะทำการลบทันทีที่มันสร้างขึ้นมา

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.

exMins ไม่ได้กำหนดไว้ในตัวอย่างนี้คุณอาจหมายถึง exdays
bhurlow เมื่อ

ใช่ .. เปลี่ยนชื่ออาร์กิวเมนต์เป็น exMins แทน .. ขอบคุณ #BhBh
Kishor Patil

7

ฉันไม่ได้จริงๆว่าถ้าเป็นสถานการณ์ที่มีรุ่น RoundCube ตั้งแต่เดือนพฤษภาคม '12 แต่สำหรับปัจจุบันหนึ่งคำตอบคือการที่คุณไม่สามารถลบroundcube_sessauthคุกกี้จาก JavaScript, HttpOnlyในขณะที่มันถูกทำเครื่องหมายเป็น และนี่หมายความว่าไม่สามารถเข้าถึงได้จากรหัสฝั่งไคลเอ็นต์ JS และสามารถลบได้โดยสคริปต์ฝั่งเซิร์ฟเวอร์หรือโดยการกระทำของผู้ใช้โดยตรง (ผ่านกลไกเบราว์เซอร์บางตัวเช่นตัวดีบักแบบรวมหรือปลั๊กอินบางตัว)


1

คุณสามารถลองวิธีนี้

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;

0

ในกรณีของฉันฉันใช้รหัสเป่าสำหรับสภาพแวดล้อมที่แตกต่างกัน

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.