Cookie Javascript tanpa tanggal kedaluwarsa

142

Saya ingin menyiapkan cookie yang tidak pernah kedaluwarsa. Apakah itu mungkin?

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

Saya tidak ingin membuat tanggal menjadi sangat besar, saya hanya ingin tahu apakah ada nilai untuk parameter kadaluwarsa pada cookie yang mengatakan tidak pernah kedaluwarsa.

Terima kasih.

Jose Vega
sumber
1
Mengapa Anda tidak ingin menjadikan kencan itu besar?
AnthonyWJones
13
membuat kencan besar membuatku merasa seolah-olah aku curang. Jika itu satu-satunya cara untuk pergi, kurasa aku harus membuat kencan besar.
Jose Vega

Jawaban:

169

Nggak. Tidak bisa dilakukan 'Cara' melakukan itu hanya membuat tanggal kedaluwarsa menjadi seperti 2030.

Paolo Bergantino
sumber
31
Hanya empat tahun lagi. Semoga Anda memperbarui cookie.
antony.ouseph.k
160
2020 - tahun cookiepocalypse
JeffreyPia
14
Sial, semakin dekat setiap tahun, saya harap kode Anda telah diperbarui.
kartsims
22
Diedit ke 2030 sekarang, kami menunda malapetaka kami 10 tahun lagi
Simeon Nakov
7
Jadi, pada dasarnya, pada 19 Januari 2038, Chewie akan duduk di Millennium Falcon dan mengeluh tentang popup kebijakan cookie di API peta galaksi lagi ...
nickhar
108

Tidak ada sintaks untuk apa yang Anda inginkan. Pengaturan yang tidak kedaluwarsa menyebabkan cookie berakhir pada akhir sesi. Satu-satunya pilihan adalah untuk mengambil nilai yang sewenang-wenang. Perlu diketahui bahwa beberapa browser memiliki masalah dengan tanggal melewati 2038 (ketika waktu unix melebihi int 32-bit).

Jamie
sumber
25
2038-01-19, 03:14:08 UTC, tepatnya.
Wilhelm Klopp
Hanya untuk memperjelas: apakah itu aturan, bekerja dengan cara yang sama di setiap browser? artinya jika saya tidak menetapkan tanggal kedaluwarsa, cookie hanya akan bertahan sampai akhir sesi.
Silver Ringvee
2
Cookie yang dibuat tanpa Expiresatau Max-Agearahan adalah cookie sesi: cookie akan dihapus ketika klien dimatikan. Namun, browser web dapat menggunakan pemulihan sesi , yang membuat sebagian besar cookie sesi permanen, seolah-olah browser tidak pernah ditutup. ( sumber: MDN )
mfluehr
67

Anda dapat melakukannya sebagai contoh di Mozilla docs :

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

PS

Tentu saja, akan ada masalah jika umat manusia masih menggunakan kode Anda pada menit pertama tahun 10000 :)

Nimir
sumber
89
Apakah Anda yakin ini hari Jumat?
David
8
google.com/... *
Adam Nelson
5
Tidak berfungsi untuk saya menggunakan npmjs.com/package/universal-cookie . Pergi dengan solusi tahun 2038 . Saya menulis tiket untuk kembali pada tahun 2030 untuk melihat apakah ada perbaikan.
Hinrich
15

Semua cookie kedaluwarsa sesuai spesifikasi cookie , Nilai maksimum yang dapat Anda tetapkan adalah

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

Jadi, waktu hidup maksimum cookie adalah

$.cookie('subscripted_24', true, { expires: 2147483647 });
Yuseferi
sumber
7
Angka itu tidak berfungsi untuk saya. Setelah sedikit coba-coba, angka tertinggi yang dapat saya gunakan adalah 99983090 (kedaluwarsa = Jum, 12 Sep 275760 18:10:24 GMT). Apa pun yang lebih tinggi mengembalikan "Tanggal Tidak Valid"
JeffreyPia
Jika Anda memberikan nomor sebagai parameter kedaluwarsa ke jquery-cookie atau js-cookie, ini diambil sebagai hari untuk kedaluwarsa dari sekarang. Jika Anda menginginkan tanggal tetap, Anda harus meneruskan objek Tanggal.
Dario Seidl
Kode di atas menggunakan plugin jquery-cookie yang telah dihentikan demi js-cookie .
Jens
2
untuk vanilla JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv
12

Anda mungkin dapat menetapkan cookie pada tanggal kedaluwarsa satu bulan atau sesuatu dan kemudian menetapkan kembali cookie setiap kali pengguna mengunjungi situs web lagi

Liam Martens
sumber
1
Ini adalah jawaban yang tepat untuk mengatur cookie tanpa akhir. Dan jika Anda perlu mempertimbangkan bahwa pengguna tidak pernah menutup situs, Anda dapat menerapkan ketentuan tambahan untuk memperbarui cookie dengan tindakan apa pun atau setelah waktu tertentu.
Alex Shink
9

Jika Anda tidak menetapkan tanggal kedaluwarsa, cookie akan kedaluwarsa pada akhir sesi pengguna. Saya sarankan menggunakan tanggal tepat sebelum waktu unix zaman akan memperpanjang melewati bilangan bulat 32-bit. Untuk memasukkannya ke dalam cookie yang akan Anda gunakan document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, dengan asumsi itu randomCookieadalah cookie yang Anda atur dan truenilainya masing-masing.

Benjamin Easterling
sumber
2

ANDA TIDAK BISA . Tidak ada kode pasti untuk digunakan untuk menetapkan cookie selamanya tetapi trik lama akan berhasil, seperti current time + 10 years.

Hanya sebuah catatan bahwa setiap tanggal di luar January 2038akan menghancurkan Anda untuk cookie ( int 32-bit ) akan dihapus secara instan. Berharap untuk keajaiban bahwa itu akan diperbaiki dalam waktu dekat. Untuk int 64-bit , tahun-tahun di sekitar 2110akan aman. Seiring berjalannya waktu, perangkat lunak dan perangkat keras akan berubah dan mungkin tidak pernah beradaptasi dengan yang lebih lama (hal-hal yang kita miliki sekarang) jadi persiapkan sekarang untuk masa depan .

Lihat masalah Tahun 2038

rhavendc
sumber
3
Saya pikir Anda tidak menyadari seberapa jauh ke depan komputer 64 bit dapat dihitung , yaitu 292 miliar tahun
Gust van de Wal
@GustvandeWal Jadi ya? Saya sudah membaca itu. Saya bahkan memasukkan tautan itu dalam jawaban saya.
rhavendc
1
Dari jawaban Anda: Untuk 64-bit int , tahun sekitar 2110 akan aman. Ini tampaknya sangat mencurigakan seperti yang Anda harapkan komputer 64-bit untuk menghitung dua kali sejauh komputer 32-bit (1970 -> 2035 -> 2110)
Gust van de Wal
@GustvandeWal Maaf jika kata-kata saya terdengar mencurigakan. Mungkin itu bukan cara terbaik untuk mengatakannya dalam bahasa Inggris. Tapi hei, aku tidak mengharapkan atau memikirkan ide semacam itu yang baru saja kamu katakan.
rhavendc
4
Catatan kecil: jika kita akan menggunakan prosesor 33-bit, maka tahun 2110 akan masuk akal.
hegez
1

Jika Anda bermaksud membaca data hanya dari sisi klien, Anda dapat menggunakan penyimpanan lokal. Itu dihapus hanya ketika cache browser dihapus.

jfhfhf839
sumber
Atau browser ditutup atau komputer dimatikan
Program Redwolf
@RedwolfPrograms Sejak kapan penyimpanan lokal dihapus ketika browser ditutup atau komputer dimatikan?
Igor Jerosimić
@ IgorJerosimić Ups! Saya kira saya pikir itu karena bug di situs saya ...
Program Redwolf
-2

Anda dapat membuat cookie tidak pernah berakhir dengan mengaturnya ke tanggal berapa pun plus satu lebih dari tahun berjalan seperti ini:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";
Jak
sumber
1
Ini akan kedaluwarsa setelah satu tahun, tidak bertahan tanpa batas waktu (AFAIK).
Solomon Ucko