ฉันต้องการใช้ jQuery เพื่อลบคุกกี้ ฉันได้ลองสิ่งนี้:
$.cookie('name', '', { expires: -1 });
แต่เมื่อฉันรีเฟรชหน้าคุกกี้ยังคงอยู่ที่นั่น:
alert('name:' +$.cookie('name'));
ทำไม?
ฉันต้องการใช้ jQuery เพื่อลบคุกกี้ ฉันได้ลองสิ่งนี้:
$.cookie('name', '', { expires: -1 });
แต่เมื่อฉันรีเฟรชหน้าคุกกี้ยังคงอยู่ที่นั่น:
alert('name:' +$.cookie('name'));
ทำไม?
คำตอบ:
ในการลบคุกกี้ด้วย JQuery ให้ตั้งค่าเป็น null:
$.cookie("name", null, { path: '/' });
แก้ไข:วิธีแก้ไขขั้นสุดท้ายคือการระบุpath
คุณสมบัติอย่างชัดเจนเมื่อใดก็ตามที่เข้าถึงคุกกี้เนื่องจาก OP เข้าถึงคุกกี้จากหลายเพจในไดเรกทอรีที่แตกต่างกันดังนั้นเส้นทางเริ่มต้นจึงแตกต่างกัน (สิ่งนี้ไม่ได้อธิบายไว้ในคำถามเดิม) วิธีแก้ปัญหาถูกค้นพบในการอภิปรายด้านล่างซึ่งอธิบายว่าเหตุใดคำตอบนี้จึงได้รับการยอมรับแม้ว่าจะไม่ถูกต้องก็ตาม
สำหรับคุกกี้ jQ บางเวอร์ชันโซลูชันด้านบนจะตั้งค่าคุกกี้เป็นสตริง null จึงไม่เอาคุกกี้ออก ใช้รหัสตามที่แนะนำด้านล่างแทน
$.removeCookie('the_cookie', { path: '/' });
if (value === null) { value = '';options.expires = -1;}
นั่นคือสิ่งที่อยู่ในฟังก์ชันการประมวลผลดังนั้นจึงควรจะทำเช่นเดียวกัน (พารามิเตอร์คือ(name, value, options)
)
path
ตัวเลือกในทั้งสองคำสั่งอย่างชัดเจนเนื่องจากเป็นค่าเริ่มต้นของเส้นทางของหน้าปัจจุบัน ทดสอบโดยการตั้งค่าเป็นรูทของโดเมนของคุณทั้งในทุกที่ที่อ่านและเขียนคุกกี้:$.cookie('name', value, {path:'/'})
$.removeCookie('cookie_name')
ทำ.
คุณสามารถลองสิ่งนี้:
$.removeCookie('the_cookie', { path: '/' });
แหล่งที่มา: https://github.com/carhartl/jquery-cookie#readme
คุณยังสามารถลบคุกกี้โดยไม่ต้องใช้ปลั๊กอิน jquery.cookie:
document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
มันคือปัญหาของคุกกี้ที่เข้าใจผิด เบราว์เซอร์รู้จักค่าคุกกี้ไม่ใช่แค่คีย์ยังเปรียบเทียบเส้นทางตัวเลือกและโดเมน ดังนั้นเบราว์เซอร์จะรับรู้ค่าที่แตกต่างกันซึ่งค่าคุกกี้ที่คีย์คือ 'ชื่อ' พร้อมตัวเลือกการตั้งค่าเซิร์ฟเวอร์ (path = '/'; domain = 'mydomain.com') และคีย์คือ 'ชื่อ' โดยไม่มีตัวเลือก
ลองทำตามนี้
$.cookie('_cookieName', null, { path: '/' });
{path: '/'} จะทำงานให้คุณ
ทำงานให้ฉันเฉพาะเมื่อpath
ถูกตั้งค่าเช่น:
$.cookie('name', null, {path:'/'})
สิ่งที่คุณทำนั้นถูกต้องปัญหาอยู่ที่อื่นเช่นคุกกี้จะถูกตั้งค่าอีกครั้งเมื่อรีเฟรช