Son kullanma tarihi olmayan Javascript Çerezi


143

Hiç sona ermeyen bir çerez oluşturmak istiyorum. Bu mümkün olabilir mi?

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

Tarihi gerçekten büyük yapmak istemiyorum, sadece çerezin sona erme süresi için asla sona ermeyeceğini söyleyen çerezde bir değer olup olmadığını merak ediyorum.

Teşekkürler.


1
Neden tarihi büyütmek istemiyorsun?
AnthonyWJones

13
tarihin büyük olması beni aldatıyormuşum gibi hissettiriyor. Tek yol buysa, sanırım tarihi büyük yapmak zorunda kalacağım.
Jose Vega

Yanıtlar:


170

Hayır! Yapamam. Bunu yapmanın 'son yolu' sadece son kullanma tarihini 2030 gibi yapmaktır.


31
Sadece dört yıl daha kaldı. Umarım kurabiyeyi güncelledin.
antony.ouseph.k

160
2020 - cookiepocalypse yılı
JeffreyPia

14
Lanet olsun, her yıl daha da yaklaşıyor, umarım kodunuz güncellenmiştir.
kartsims

22
Şimdi 2030'da düzenlendi, kıyametimizi 10 yıl daha erteliyoruz
Simeon Nakov

7
Yani, temelde, 19 Ocak 2038'de, Chewie Millennium Falcon'da oturacak ve galaktik harita API'sındaki çerez politikası pop
up'ından

108

İstediğinizin sözdizimi yoktur. Son kullanma tarihinin ayarlanmaması, oturumun sonunda çerezin süresinin dolmasına neden olur. Tek seçenek, keyfi olarak büyük bir değer seçmektir. Bazı tarayıcıların 2038'den önceki tarihlerle ilgili sorunları olduğunu unutmayın (unix çağırma süresi 32 bit int değerini aştığında).


25
2038-01-19, 03:14:08 UTC, kesin olmak gerekirse.
Wilhelm Klopp

Açıklığa kavuşturmak için: bu, her tarayıcıda aynı şekilde çalışan bir kural mıdır? Bu, son kullanma tarihini ayarlamazsam çerezin yalnızca oturumun sonuna kadar süreceğini gösterir.
Silver Ringvee

2
ExpiresVeya Max-Ageyönergesi olmadan oluşturulan bir çerez bir oturum çerezidir: istemci kapatıldığında silinir. Ancak, web tarayıcıları oturum geri yüklemeyi kullanabilir , bu da oturum çerezlerinin çoğunu, sanki tarayıcı hiç kapatılmamış gibi kalıcı hale getirir. ( Kaynak: MDN )
mfluehr

67

Mozilla belgelerinde örnek olarak şunları yapabilirsiniz :

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

PS

Elbette, insanlık kodunuzu hala yılın ilk dakikasında kullanıyorsa bir sorun olacaktır :)


89
Bir cuma olduğundan emin misin?
David


5
Npmjs.com/package/universal-cookie kullanarak benim için çalışmadı . 2038 yılı çözümü ile gitti . 2030'da bir düzeltme olup olmadığını görmek için bir bilet yazdım.
Hinrich

15

Tüm çerezlerin süresi çerez spesifikasyonuna göre dolar , ayarlayabileceğiniz maksimum değer

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

Yani maksimum çerez ömrü

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

7
Bu sayı benim için işe yaramadı. Biraz deneme yanılma işleminden sonra kullanabildiğim en yüksek sayı 99983090 idi (geçerlilik süresi = Cum, 12 Eylül 275760 18:10:24 GMT). Daha yüksek bir şey "Geçersiz Tarih" döndürdü
JeffreyPia

Bir sayıyı expires parametresi olarak jquery-cookie veya js-cookie'ye iletirseniz, zaman aşımının sona ermesi gün olarak alınır. Sabit bir tarih istiyorsanız bunun yerine bir Date nesnesi iletmeniz gerekir.
Dario Seidl

Yukarıdaki kod , js-cookie lehine kullanımdan kaldırılan jquery-cookie eklentisini kullanır .
Jens

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

12

Çerezleri bir ay veya daha sonra bir sona erme tarihinde ayarlayabilir ve ardından kullanıcı web sitesini her ziyaret ettiğinde çerezi yeniden atayabilirsiniz.


1
Sonsuz çerezleri ayarlamak için doğru cevap budur. Ve kullanıcının siteyi asla kapatmayacağını hesaba katmanız gerekirse, çerezleri herhangi bir eylemle veya belirli bir süre sonra güncellemek için ek bir koşul uygulayabilirsiniz.
Alex Shink

10

Bir son kullanma tarihi belirlemezseniz, çerezin süresi kullanıcı oturumunun sonunda sona erer. Unix epoch süresinin 32 bitlik bir tamsayıyı geçmeden hemen önce tarihi kullanmanızı öneririm. Bunu kullandığınız çereze koymak için document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, randomCookieayarladığınız çerez olduğunu ve trueilgili değer olduğunu varsayarsak .


2

SADECE YAPAMAZSINIZ . Sonsuza kadar çerez ayarlamak için kullanılacak tam bir kod yoktur, ancak eski bir hile yapacaktır current time + 10 years.

Sadece January 2038çerezlerin ( 32 bit int ) ötesindeki tarihlerin sizi mahkum edeceğini unutmayın . Yakın gelecekte düzeltilecek bir mucize diliyorum. İçin 64 bit int , yıllar etrafında 2110güvenli olacak. Zaman geçtikçe, yazılım ve donanım böylece hazırlamak değişecek ve daha eski olanlar (şimdi var şeylere) uyum hiçbir zaman şimdi için gelecek .

Bkz. Yıl 2038 sorunu



@GustvandeWal Peki evet? Bunu zaten okudum. Cevabımı bile bu bağlantıya dahil ettim.
rhavendc

1
Cevabınızdan: 64-bit int için 2110'lu yıllar güvenli olacaktır. Bu, 64 bit bilgisayarların 32 bit bilgisayarlardan iki kat daha fazla sayılmasını beklediğiniz gibi şüpheli görünüyor (1970 -> 2035 -> 2110)
Gust van de Wal

@GustvandeWal Kelimelerim şüpheli görünüyorsa özür dilerim. Belki İngilizce olarak söylemenin en iyi yolu bu değildir. Ama hey, az önce söylediğin gibi bir fikir beklemiyordum ya da düşünmedim.
rhavendc

4
Küçük bir not: 33-bit işlemciler kullanacak olsaydık, o zaman 2110 yılı mantıklı olurdu.
hegez

1

Verileri yalnızca istemci tarafından okumak istiyorsanız, yerel depolamayı kullanabilirsiniz. Yalnızca tarayıcının önbelleği temizlendiğinde silinir.


Veya tarayıcı kapatıldı veya bilgisayar kapatıldı
Redwolf Programs

@RedwolfPrograms Tarayıcı kapatıldığında veya bilgisayar kapatıldığında yerel depolama ne zamandan beri temizleniyor?
Igor Jerosimić

@ IgorJerosimić Hata! Sanırım bir sitedeki bir böcek yüzünden ...
Redwolf Programları

-2

Bir çerezi, herhangi bir tarihe ve şu anki yıldan bir daha fazlasına ayarlayarak hiçbir zaman sona ermezsiniz:

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

1
Bir yıl sonra sürecek, süresiz sürmeyecek (AFAIK).
Solomon Ucko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.