Javascript Cookie ที่ไม่มีวันหมดอายุ


143

ฉันต้องการตั้งค่าคุกกี้ที่ไม่มีวันหมดอายุ จะเป็นไปได้ไหม

 document.cookie = "name=value; expires=date; path=path;domain=domain; secure";

ฉันไม่ต้องการทำให้วันที่มีขนาดใหญ่มากฉันแค่สงสัยว่ามีค่าสำหรับพารามิเตอร์การหมดอายุบนคุกกี้ที่บอกว่ามันจะไม่มีวันหมดอายุ

ขอบคุณ


1
ทำไมคุณไม่ต้องการทำให้วันที่มีขนาดใหญ่?
AnthonyWJones

13
ทำให้วันที่กว้างทำให้ฉันรู้สึกราวกับว่าฉันกำลังนอกใจ หากเป็นวิธีเดียวที่จะไปฉันคิดว่าฉันจะต้องทำให้วันที่มีขนาดใหญ่
Jose Vega

คำตอบ:


170

Nope ไม่สามารถทำได้ วิธีการดำเนินการที่ทำให้วันหมดอายุเป็นเช่นปี 2030


31
อีกสี่ปีข้างหน้า หวังว่าคุณจะปรับปรุงคุกกี้
antony.ouseph.k

160
2020 - ปีแห่งการปรุงสุก
เจฟฟรีย์เปียอา

14
ห่าฉันเข้ามาใกล้ทุกปีฉันหวังว่ารหัสของคุณจะได้รับการปรับปรุง
kartsims

22
ได้รับการแก้ไขถึง 2030 ตอนนี้เรากำลังเลื่อนการลงโทษของเราอีก 10 ปี
Simeon Nakov

7
ดังนั้นโดยทั่วไปในวันที่ 19 มกราคม 2038 Chewie จะนั่งใน Millennium Falcon และบ่นเกี่ยวกับนโยบายคุกกี้ที่ป๊อปอัปบนแผนที่กาแล็กซี่ API อีกครั้ง ...
nickhar

108

ไม่มีไวยากรณ์สำหรับสิ่งที่คุณต้องการ การตั้งค่าไม่หมดอายุทำให้คุกกี้หมดอายุเมื่อสิ้นสุดเซสชัน ตัวเลือกเดียวคือเลือกค่าขนาดใหญ่โดยพลการ โปรดทราบว่าเบราว์เซอร์บางตัวมีปัญหากับวันที่ผ่านมา 2581 (เมื่อเวลายูนิกซ์ยุคเกิน 32- บิต int)


25
2038-01-19, 03:14:08 UTC, แม่นยำ
Wilhelm Klopp

เพื่อชี้แจง: นั่นเป็นกฎที่ทำงานแบบเดียวกันในทุกเบราว์เซอร์หรือไม่? หมายความว่าหากฉันไม่ได้กำหนดวันหมดอายุคุกกี้จะคงอยู่เฉพาะเมื่อสิ้นสุดเซสชัน
Silver Ringvee

2
คุกกี้ที่สร้างขึ้นโดยไม่มีคำสั่งExpiresหรือMax-Ageเป็นคุกกี้เซสชั่น: มันจะถูกลบเมื่อลูกค้าปิดตัวลง อย่างไรก็ตามเว็บเบราว์เซอร์อาจใช้การกู้คืนเซสชันซึ่งทำให้เซสชันคุกกี้ส่วนใหญ่เป็นแบบถาวรราวกับว่าเบราว์เซอร์ไม่เคยปิด (ที่มา: MDN )
mfluehr

67

คุณสามารถทำตามตัวอย่างในMozilla docs :

 document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";

PS

แน่นอนว่าจะมีปัญหาหากมนุษยชาติยังคงใช้รหัสของคุณในนาทีแรกของปี 10,000 :)


89
คุณแน่ใจหรือไม่ว่าเป็นวันศุกร์
David


5
ไม่ได้ทำงานให้ฉันโดยใช้npmjs.com/package/universal-cookie ไปกับการแก้ปัญหาในปี 2038 ฉันเขียนตั๋วเพื่อกลับมาในปี 2030 เพื่อดูว่ามีการแก้ไขไหม
Hinrich

15

คุกกี้ทั้งหมดหมดอายุตามข้อกำหนดของคุกกี้ค่าสูงสุดที่คุณสามารถกำหนดได้คือ

 2^31 - 1 = 2147483647 = 2038-01-19 04:14:07

ดังนั้นเวลาชีวิตคุกกี้สูงสุดคือ

$.cookie('subscripted_24', true, { expires: 2147483647 });

7
หมายเลขนั้นใช้ไม่ได้สำหรับฉัน หลังจากการทดลองใช้และข้อผิดพลาดเล็กน้อยจำนวนสูงสุดที่ฉันสามารถใช้ได้คือ 99983090 (หมดอายุ = ศุกร์, 12 ก.ย. 275760 18:10:24 GMT) สิ่งใดที่ส่งคืนสูงกว่า "วันที่ไม่ถูกต้อง"
JeffreyPia

หากคุณส่งผ่านหมายเลขเป็นพารามิเตอร์ expires ไปยัง jquery-cookie หรือ js-cookie จะใช้เวลาเป็นวันในการหมดอายุนับจากนี้ หากคุณต้องการวันที่แน่นอนคุณต้องผ่านวัตถุ Date แทน
Dario Seidl

รหัสข้างต้นใช้jQuery คุกกี้ปลั๊กอินซึ่งได้รับการเกษียณในความโปรดปรานของJS-คุกกี้
Jens

2
สำหรับ vanilla JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv

12

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


1
นี่คือคำตอบที่ถูกต้องในการตั้งค่าคุกกี้ที่ไม่มีที่สิ้นสุด และหากคุณจำเป็นต้องคำนึงว่าผู้ใช้ไม่เคยปิดเว็บไซต์คุณสามารถใช้เงื่อนไขเพิ่มเติมสำหรับการปรับปรุงคุกกี้ด้วยการกระทำใด ๆ หรือหลังจากเวลาที่กำหนด
Alex Shink

10

หากคุณไม่ได้กำหนดวันหมดอายุคุกกี้จะหมดอายุเมื่อสิ้นสุดเซสชันของผู้ใช้ ฉันแนะนำให้ใช้วันที่ก่อนเวลา unix ยุคจะขยายผ่านจำนวนเต็ม 32 บิต หากต้องการใส่ในคุกกี้ที่คุณจะใช้document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;สมมติว่าrandomCookieเป็นคุกกี้ที่คุณตั้งค่าและtrueเป็นค่าที่เกี่ยวข้อง


2

คุณก็ไม่สามารถ ไม่มีรหัสที่แน่นอนที่จะใช้สำหรับการตั้งค่าคุกกี้ถาวร แต่เคล็ดลับเก่าจะทำเช่นcurrent time + 10 yearsนั้น

โปรดทราบว่าวันที่ใด ๆ ที่เกินJanuary 2038จะทำให้คุณถึงคุกกี้ ( int 32- บิต ) จะถูกลบทันที ต้องการปาฏิหาริย์ที่จะได้รับการแก้ไขในอนาคตอันใกล้ สำหรับ64- บิต intปีรอบ ๆ2110จะปลอดภัย เมื่อเวลาผ่านไป, ซอฟแวร์และฮาร์ดแวร์จะมีการเปลี่ยนแปลงและไม่อาจปรับตัวเข้ากับคนเก่า (สิ่งที่เรามีตอนนี้) เพื่อเตรียมความพร้อมในขณะนี้สำหรับอนาคต

ดูปัญหาปี 2038


3
ฉันคิดว่าคุณไม่ได้ตระหนักถึงวิธีการห่างไกลในอนาคตคอมพิวเตอร์ 64 บิตสามารถนับคือ 292,000,000,000 ปี
Gust แวนเดอวอล

@GustvandeWal งั้นเหรอ? ฉันอ่านไปแล้ว ฉันยังรวมลิงค์นั้นไว้ในคำตอบของฉันด้วย
rhavendc

1
จากคำตอบของคุณ: สำหรับ64- บิต intปีประมาณ 2110 จะปลอดภัย ดูเหมือนว่าคุณจะคาดหวังว่าคอมพิวเตอร์ 64 บิตนับเป็นสองเท่าของคอมพิวเตอร์ 32 บิต (1970 -> 2035 -> 2110)
Gust van de Wal

@GustvandeWal ขออภัยถ้าคำพูดของฉันฟังดูน่าสงสัย อาจไม่ใช่วิธีที่ดีที่สุดที่จะพูดเป็นภาษาอังกฤษ แต่เดี๋ยวก่อนฉันไม่ได้คาดหวังหรือคิดว่าความคิดแบบนี้ที่คุณเพิ่งพูดไป
rhavendc

4
ข้อควรทราบเล็ก ๆ น้อย ๆ : ถ้าเราจะใช้โปรเซสเซอร์ 33 บิตดังนั้นปี 2110 จะสมเหตุสมผล
hegez

1

หากคุณตั้งใจจะอ่านข้อมูลจากฝั่งไคลเอ็นต์เท่านั้นคุณสามารถใช้ที่จัดเก็บในตัวเครื่อง มันจะถูกลบเฉพาะเมื่อล้างแคชของเบราว์เซอร์


หรือเบราว์เซอร์ถูกปิดหรือคอมพิวเตอร์ถูกปิด
โปรแกรม Redwolf

@RedwolfPrograms ตั้งแต่เมื่อใดที่เก็บข้อมูลในเครื่องจะถูกล้างเมื่อเบราว์เซอร์ปิดหรือปิดคอมพิวเตอร์?
Igor Jerosimić

@ IgorJerosimićโอ๊ะ! ผมคิดว่าผมคิดว่าเป็นเพราะข้อผิดพลาดในเว็บไซต์ของฉัน ...
Redwolf โปรแกรม

-2

คุณสามารถทำให้คุกกี้ไม่มีวันสิ้นสุดด้วยการตั้งค่าเป็นวันใดก็ได้บวกมากกว่าปีปัจจุบันเช่นนี้:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";

1
มันจะหมดอายุหลังจากหนึ่งปีไม่ใช่ครั้งสุดท้าย (AFAIK)
โซโลมอน Ucko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.