จะลบคุกกี้โดยใช้ jQuery ได้อย่างไร?


90

ฉันต้องการใช้ jQuery เพื่อลบคุกกี้ ฉันได้ลองสิ่งนี้:

$.cookie('name', '', { expires: -1 });

แต่เมื่อฉันรีเฟรชหน้าคุกกี้ยังคงอยู่ที่นั่น:

alert('name:' +$.cookie('name'));

ทำไม?


เบราว์เซอร์บางตัวจะลบคุกกี้หลังจากที่เบราว์เซอร์รีสตาร์ทแล้วเท่านั้น
Eboubaker

คำตอบ:


148

ในการลบคุกกี้ด้วย JQuery ให้ตั้งค่าเป็น null:

$.cookie("name", null, { path: '/' });

แก้ไข:วิธีแก้ไขขั้นสุดท้ายคือการระบุpathคุณสมบัติอย่างชัดเจนเมื่อใดก็ตามที่เข้าถึงคุกกี้เนื่องจาก OP เข้าถึงคุกกี้จากหลายเพจในไดเรกทอรีที่แตกต่างกันดังนั้นเส้นทางเริ่มต้นจึงแตกต่างกัน (สิ่งนี้ไม่ได้อธิบายไว้ในคำถามเดิม) วิธีแก้ปัญหาถูกค้นพบในการอภิปรายด้านล่างซึ่งอธิบายว่าเหตุใดคำตอบนี้จึงได้รับการยอมรับแม้ว่าจะไม่ถูกต้องก็ตาม

สำหรับคุกกี้ jQ บางเวอร์ชันโซลูชันด้านบนจะตั้งค่าคุกกี้เป็นสตริง null จึงไม่เอาคุกกี้ออก ใช้รหัสตามที่แนะนำด้านล่างแทน

$.removeCookie('the_cookie', { path: '/' });

แต่จากแหล่งที่มาที่นี่: plugins.jquery.com/files/jquery.cookie.js.txt : if (value === null) { value = '';options.expires = -1;}นั่นคือสิ่งที่อยู่ในฟังก์ชันการประมวลผลดังนั้นจึงควรจะทำเช่นเดียวกัน (พารามิเตอร์คือ(name, value, options))
aularon

9
รหัสการตั้งค่าคุกกี้และรหัสทดสอบอยู่ในหน้าเดียวกันหรือไม่? หากไม่เป็นเช่นนั้นคุณจะต้องตั้งค่าpathตัวเลือกในทั้งสองคำสั่งอย่างชัดเจนเนื่องจากเป็นค่าเริ่มต้นของเส้นทางของหน้าปัจจุบัน ทดสอบโดยการตั้งค่าเป็นรูทของโดเมนของคุณทั้งในทุกที่ที่อ่านและเขียนคุกกี้:$.cookie('name', value, {path:'/'})
Chadwick

1
Chadwick> บางทีคุณอาจจะพูดถูก สำหรับ exm. ฉันตั้งค่าคุกกี้ใน site.com จากนั้นไปที่ site.com/user, site.com/user/mod, site.com/user/mod/new และฉันต้องการเห็นคุกกี้ในหน้านี้ทั้งหมด ต้องมีลักษณะอย่างไรเช่นนี้: {path: '/'}?
user319854

2
รหัสนี้ไม่ได้ลบคุกกี้ แต่ตั้งค่าว่างในค่า
Tomzan

12
-1 เพราะนี่ไม่ได้ลบคุกกี้จริงๆ $.removeCookie('cookie_name')ทำ.
Rosdi Kasim

71

คุณสามารถลองสิ่งนี้:

$.removeCookie('the_cookie', { path: '/' });

แหล่งที่มา: https://github.com/carhartl/jquery-cookie#readme


ใช่ .. ฉันสบายดี
Cataclysm

เมื่อคุณใช้โดเมนย่อยคุณอาจต้องระบุด้วย โดยเฉพาะอย่างยิ่งเนื่องจากอาจต้องใช้ระยะเวลาที่จุดเริ่มต้นของชื่อโดเมน (.www.example.com)
Alexis Wilke

โปรดทราบว่าสิ่งนี้ใช้ไม่ได้สำหรับเราที่รหัสต้องไปยังฟังก์ชันอื่นไม่ว่าด้วยเหตุผลใดก็ตาม $ .cookie ('name', null) ตามข้างบนน่าจะน่าเชื่อถือกว่า อย่างไรก็ตามการลบคุกกี้นี้อาจใช้ได้กับบางคน
Ligemer

นี่คือคำตอบที่แท้จริง!
Kalaschni


4

มันคือปัญหาของคุกกี้ที่เข้าใจผิด เบราว์เซอร์รู้จักค่าคุกกี้ไม่ใช่แค่คีย์ยังเปรียบเทียบเส้นทางตัวเลือกและโดเมน ดังนั้นเบราว์เซอร์จะรับรู้ค่าที่แตกต่างกันซึ่งค่าคุกกี้ที่คีย์คือ 'ชื่อ' พร้อมตัวเลือกการตั้งค่าเซิร์ฟเวอร์ (path = '/'; domain = 'mydomain.com') และคีย์คือ 'ชื่อ' โดยไม่มีตัวเลือก



1

ทำงานให้ฉันเฉพาะเมื่อpathถูกตั้งค่าเช่น:

$.cookie('name', null, {path:'/'})

การลงคะแนนทำให้คุณคัดลอกและวางคำตอบของฉันเป็นของคุณ
Otto Kanellis

1
@OttoKanellis ดังนั้นฉันขอแนะนำให้ลดความสำคัญของคำตอบที่ยอมรับด้วย (เนื่องจากมีการแก้ไขหลังจากคำตอบของฉัน) และลดคะแนนคำตอบของคุณด้วย (เนื่องจากคุณไม่ได้เน้นความสำคัญของพารามิเตอร์เส้นทาง )!
Andron

-3

สิ่งที่คุณทำนั้นถูกต้องปัญหาอยู่ที่อื่นเช่นคุกกี้จะถูกตั้งค่าอีกครั้งเมื่อรีเฟรช


4
แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป
Uri Agassi

สำหรับคำตอบนี้สิ่งที่ฉันพูดคือ OP กำลังทำในทางที่ถูกต้อง การคัดลอกวางรหัส OP จะซ้ำซ้อนและการเพิ่มรหัสอื่นจะทำให้ผู้อ่านสับสน คุณสามารถเลื่อนขึ้นและดูว่า OP กำลังทำอะไรอยู่ซึ่งเป็น "ส่วนสำคัญ" ที่นี่ อย่างไรก็ตามหากคุณรู้สึกว่าจะเป็นการดีกว่าที่จะรวมบางสิ่งบางอย่าง (เห็นได้ชัดว่ามีบางคนทำ ... หนึ่งในนั้นโหวตคำตอบของฉันด้วย :)) เพียงแก้ไขคำตอบและแก้ไขตามนั้น ขอแสดงความนับถือ
aularon

ปัญหาเกี่ยวกับการเชื่อมโยงก็คือพวกเขามีแนวโน้มที่จะ "เน่า" - พวกเขามีการเปลี่ยนแปลงที่พวกเขาย้ายพวกเขาหายไป (กรณีในจุด - การเชื่อมโยงของคุณอยู่แล้ว ! ตาย) นั่นคือเหตุผลที่เราต้องการให้คุณอ้างอิงข้อความที่เกี่ยวข้องจากลิงก์ควบคู่ไปด้วยดังนั้นคำตอบของคุณจะอยู่ในตัวเอง (ดูmeta.stackexchange.com/questions/8231/… )
Uri Agassi

ฉันตระหนักดีถึงเรื่องนี้ แต่อีกครั้ง: นี่ไม่ใช่กรณีนี้ คำตอบทั้งหมดข้างต้นสามารถเขียนใหม่ได้ว่า "สิ่งที่คุณกำลังทำนั้นถูกต้องปัญหาอยู่ที่อื่นเช่นคุกกี้จะถูกตั้งค่าอีกครั้งเมื่อรีเฟรช" ดังนั้นอีกครั้งการเชื่อมโยงเน่าเป็นปัญหารวมถึงคำตอบเองข้างลิงก์คือวิธีที่จะไป มันไม่เกี่ยวข้องกับคำตอบนี้
aularon

ครั้งแล้วครั้งเล่าหากคำตอบมีหนึ่งลิงก์และลิงก์นั้นตายไม่ได้หมายความว่าคำตอบนั้นไม่ดีพอ ลิงก์บางลิงก์มีไว้เพื่อให้รายละเอียดเพิ่มเติม แต่ไม่จำเป็นสำหรับความสมบูรณ์ของคำตอบ พฤติกรรมนี้สำหรับฉันดูเหมือนบอทโปรแกรมที่ไม่ดีที่ไม่มี NLP พื้นฐานที่จะเข้าใจลิงก์บริบทที่ให้มาคุณควรหยุดทำสิ่งนี้
aularon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.