Cookie Javascript không có ngày hết hạn


142

Tôi muốn thiết lập một cookie không bao giờ hết hạn. Điều đó thậm chí có thể?

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

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

Cảm ơn.


1
Tại sao bạn không muốn làm cho ngày lớn?
AnthonyWJones

13
làm cho ngày lớn làm tôi cảm thấy như thể tôi đang 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.
Jose Vega

Câu trả lời:


169

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


31
Chỉ còn bốn năm nữa để đi. Hy vọng bạn cập nhật cookie.
antony.ouseph.k 30/03/2016

160
2020 - năm của cookiepocalypse
JeffreyPia

14
Chết tiệt, nó đang tiến gần hơn mỗi năm, tôi hy vọng mã của bạn đã được cập nhật.
kartims

22
Bây giờ nó đã được chỉnh sửa đến năm 2030, chúng tôi sẽ hoãn số năm của chúng tôi thêm 10 năm nữa
Simeon Nakov

7
Vì vậy, về cơ bản, vào ngày 19 tháng 1 năm 2038, Chewie sẽ ngồi trong Thiên niên kỷ Falcon và phàn nàn về cửa sổ bật lên chính sách cookie trên API bản đồ thiên hà một lần nữa ...
nickhar

108

Không có cú pháp cho những gì bạn muốn. Không cài đặt hết hạn 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 ý. Xin lưu ý rằng một số trình duyệt có vấn đề với ngày qua năm 2038 (khi thời gian unix epoch vượt quá int 32 bit).


25
Chính xác là 2038-01-19, 03:14:08 UTC.
Wilhelm Klopp

Chỉ cần làm rõ: đó có phải là một 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ỉ tồn tại đến cuối phiên.
Bạc Ringvee

2
Cookie được tạo mà không có Expireshoặc Max-Agechỉ thị là cookie phiên: nó sẽ bị xóa khi máy khách tắt. Tuy nhiên, các trình duyệt web có thể sử dụng khôi phục phiên , điều này làm cho hầu hết các cookie phiên là vĩnh viễn, như thể trình duyệt không bao giờ bị đóng. ( nguồn: MDN )
mfluehr

67

Bạn có thể làm như ví dụ trên tài liệu Mozilla :

 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 vào phút đầu tiên của năm 10000 :)


89
Bạn có chắc là thứ Sáu không?
David


5
Tôi đã không làm việc với tôi bằng cách sử dụng npmjs.com/package/universal-cookie . Đã đi với giải pháp năm 2038 . Tôi đã viết một vé để trở lại vào năm 2030 để xem có sửa chữa không.
Hinrich

15

Tất cả các cookie hết hạn theo thông số kỹ thuật của cookie , Giá trị tối đa bạn có thể đặt là

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

Vì vậy, thời gian tồn tại tối đa của cookie là

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

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

Nếu bạn chuyển một số dưới dạng tham số hết hạn cho jquery-cookie hoặc js-cookie, thì sẽ mất vài ngày để hết hạn kể từ bây giờ. Nếu bạn muốn một ngày cố định, bạn phải vượt qua một đối tượng Ngày thay thế.
Dario Seidl

Đoạn mã trên sử dụng plugin jquery-cookie đã được loại bỏ để ủng hộ js-cookie .
Jens

2
cho vanilla JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv

12

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


1
Đây là câu trả lời đúng để đặt cookie vô tận. Và nếu bạn cần tính đến việc người dùng không bao giờ đóng trang, bạn có thể thực hiện một điều kiện bổ sung để cập nhật cookie bằng bất kỳ hành động nào hoặc sau một thời gian nhất định.
Alex Shink

9

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 unix epoch sẽ kéo dài thông qua số nguyên 32 bit. Để đặt nó vào cookie bạn sẽ sử dụng document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, giả sử đó randomCookielà cookie bạn đang đặt và truelà giá trị tương ứng.


2

BẠN CHỈ CÓ THỂ . Không có mã chính xác để sử dụng để đặt cookie mãi mãi nhưng một thủ thuật cũ sẽ làm, như thế current time + 10 years.

Chỉ cần lưu ý rằng bất kỳ ngày nào vượt quá January 2038sẽ làm bạn thất vọng vì cookie ( int 32 bit ) sẽ bị xóa ngay lập tức. Mong muốn một phép màu sẽ được khắc phục trong tương lai gần. Đối với int 64-bit , năm xung quanh 2110sẽ an toàn. Khi 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 thứ cũ hơn (những thứ chúng ta có bây giờ), vì vậy hãy chuẩn bị ngay bây giờ cho tương lai .

Xem vấn đề năm 2038


3
Tôi nghĩ bạn không nhận ra tương lai máy tính 64 bit có thể đếm được bao xa, cụ thể là 292 tỷ năm
Gust van de Wal

@GustvandeWal Vậy vâng? Tôi đã đọc nó. Tôi thậm chí bao gồm liên kết đó trong câu trả lời của tôi.
rhavendc

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

@GustvandeWal Xin lỗi nếu lời nói của tôi nghe có vẻ đáng ngờ. Có lẽ đó không phải là cách tốt nhất để nói bằng tiếng Anh. Nhưng này, tôi không mong đợi hoặc nghĩ rằng ý tưởng mà bạn vừa nói.
rhavendc

4
Một lưu ý nhỏ: nếu chúng ta sẽ sử dụng bộ xử lý 33 bit, thì năm 2110 sẽ có ý nghĩa.
bá chủ

1

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


Hoặc trình duyệt bị đóng hoặc máy tính bị tắt
Chương trình Redwolf

@RedwolfPrograms Kể từ khi nào bộ nhớ cục bộ bị xóa khi đóng trình duyệt hoặc máy tính tắt?
Igor Jerosimić

@ IgorJerosimić Rất tiếc! Tôi đoán tôi đã nghĩ rằng do một lỗi trong trang web của tôi ...
Chương trình Redwolf

-2

Bạn có thể tạo cookie không bao giờ kết thúc bằng cách đặt nó vào bất kỳ ngày nào cộng với một ngày nhiều hơn năm hiện tại như thế này:

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

1
Nó sẽ hết hạn sau một năm, không kéo dài vô tận (AFAIK).
Solomon Ucko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.