2009-02-10 61 views
94

Tôi muốn thiết lập cookie không bao giờ hết hạn. Liệu điều đó có thể xảy ra được không?Cookie Javascript không có ngày hết hạn

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

Tôi không muốn thực hiện ngày thực sự lớn, tôi chỉ tự hỏi liệu có giá trị cho thông số hết hạn trên cookie nói với nó không bao giờ hết hạn hay không.

Cảm ơn.

+1

Tại sao bạn không muốn đặt ngày lớn? – AnthonyWJones

+8

làm cho ngày lớn làm cho tôi cảm thấy như thể tôi đã gian lận. Nếu đó là cách duy nhất để đi, tôi đoán tôi sẽ phải làm cho ngày lớn. –

Trả lời

115

Không. Không thể làm được. 'Cách' để làm điều đó chỉ là làm cho ngày hết hạn giống như năm 2030.

+197

2020 đang tiến gần hơn! Hãy nhớ cập nhật cookie của bạn! ;) –

+11

Chỉ còn bốn năm nữa thôi. Hy vọng bạn đã cập nhật cookie. –

+3

Và điều gì sai với 2020 anyway :) – Ukuser32

87

Không có cú pháp cho những gì bạn muốn. Cài đặt không hết hạn sẽ khiến cookie hết hạn vào cuối phiên. Tùy chọn duy nhất là chọn một số giá trị lớn tùy ý. Hãy lưu ý rằng một số trình duyệt gặp sự cố với ngày tháng 2038 (khi thời gian kết thúc unix vượt quá int 32 bit).

+11

2038-01-19, 03:14:08 UTC, chính xác. –

+0

Chỉ cần làm rõ: đó là quy tắc, hoạt động theo cùng một cách trong mọi trình duyệt? có nghĩa là nếu tôi không đặt ngày hết hạn, cookie sẽ chỉ kéo dài đến cuối phiên. –

7

Bạn có thể có thể thiết lập một cookie tại ngày hết hạn của một tháng hoặc một cái gì đó và sau đó phân công lại cookie mỗi khi người dùng truy cập các trang web một lần nữa

35

Bạn có thể làm như ví dụ trên Mozilla docs:

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

PS

Tất nhiên, sẽ có một vấn đề nếu nhân loại vẫn sử dụng mã của bạn trên phút đầu tiên của năm 10000 :)

+38

Bạn có chắc chắn một ngày thứ Sáu không? –

+4

https://www.google.com/webhp?sourceid=chrome-instant&rlz=1C1KMZB_enUS560US560&ion=1&espv=2&ie=UTF-8#q=what+day+is+december+31st+9999&* –

+3

http: // www. wolframalpha.com/input/?i=31+Dec+9999+23:59:59+GMT –

7

Nếu bạn không đặt ngày hết hạn, cookie sẽ hết hạn vào cuối phiên của người dùng. Tôi khuyên bạn nên sử dụng ngày ngay trước khi thời gian epix unix sẽ mở rộng thông qua một số nguyên 32 bit. Để đặt cookie đó vào cookie, bạn sẽ sử dụng document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, giả sử rằng randomCookie là cookie bạn đang đặt và true là giá trị tương ứng.

0

Nếu bạn định đọc dữ liệu từ phía máy khách, bạn có thể sử dụng bộ nhớ cục bộ. Chỉ bị xóa khi bộ nhớ cache của trình duyệt bị xóa.

4

Tất cả các cookie hết hạn theo cookie specification, giá trị tối đa bạn có thể đặt là

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

thời gian cuộc sống Cookie Vì vậy, tối đa là

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

Con số đó không hiệu quả đối với tôi. Sau một chút thử và sai, số cao nhất tôi có thể sử dụng là 99983090 (hết hạn = Thứ Sáu, 12 tháng 9 275760 18:10:24 GMT). Bất cứ điều gì cao hơn trả về "Invalid Date" – JeffreyPia

+0

Nếu bạn vượt qua một số như hết hạn tham số để jquery-cookie hoặc js-cookie, nó được lấy như ngày hết hạn từ bây giờ. Nếu bạn muốn có ngày cố định, bạn phải chuyển đối tượng Date thay thế. –

1

bạn chỉ có thể KHÔNG. Không có mã chính xác để sử dụng để đặt cookie vĩnh viễn nhưng một mẹo cũ sẽ thực hiện, chẳng hạn như current time + 10 years.

Chỉ cần lưu ý rằng bất kỳ ngày nào vượt quá January 2038 sẽ khiến bạn bị mất cookie (32-bit int) sẽ bị xóa ngay lập tức. Chúc cho một phép lạ mà sẽ được sửa chữa trong tương lai gần. Đối với 64-bit int, năm xung quanh 2110 sẽ an toàn. Thời gian trôi qua, phần mềm và phần cứng sẽ thay đổi và có thể không bao giờ thích nghi với những cái cũ (những thứ chúng tôi hiện có) để chuẩn bị ngay bây giờ cho tương lai.

Xem Year 2038 problem

+1

Tôi nghĩ bạn không nhận ra [máy tính 64 bit có thể đếm được bao nhiêu trong tương lai] (https://en.wikipedia.org/wiki/Year_2038_problem#Solutions), cụ thể là 292 tỷ năm –

+0

@GustvandeWal Vì vậy, yeah? Tôi đã đọc nó rồi. Tôi thậm chí còn đưa vào liên kết đó trong câu trả lời của tôi. – rhavendc

+0

Từ câu trả lời của bạn: Đối với * 64 bit int *, năm khoảng 2110 sẽ an toàn. Điều này có vẻ nghi ngờ giống như bạn mong đợi các máy tính 64 bit đếm gấp đôi so với các máy tính 32-bit (1970 -> 2035 -> 2110) –

-1

Chỉ cần bỏ qua hết hạn tham số trong đối tượng khởi tạo. Nó làm việc tốt cho tôi.

+0

Các câu trả lời khác rõ ràng không đồng ý và đề xuất phương án thay thế. – Alejandro

+0

Nó sẽ hết hạn vào cuối phiên của người dùng. https://stackoverflow.com/a/4132139/3328979 – Arashsoft

Các vấn đề liên quan