web-dev-qa-db-ja.com

Cookieを無期限に設定します

Cookieの設定に関するPHPドキュメント を見ると、Cookieの有効期限を設定できることがわかります。ブラウザーセッションの終了時または将来のある時点でCookieを期限切れに設定できますが、Cookieを期限切れにしないように設定する方法がわかりません。これはさらに可能であり、これはどのように達成されますか?

170
brainimus

すべてのCookieは Cookie仕様 に従って期限切れになるため、これはPHPの制限ではありません。

はるか未来の日付を使用してください。たとえば、10年で期限切れになるCookieを設定します。

setcookie(
  "CookieName",
  "CookieValue",
  time() + (10 * 365 * 24 * 60 * 60)
);

32ビットPHPで過去の日付2038を設定すると、数値は折り返され、すぐに期限切れになるCookieを取得することに注意してください。

237
Joeri Hendrickx

最大値:2147483647

setcookie("CookieName", "CookieValue", 2147483647);

整数のオーバーフローを回避するには、タイムスタンプを次のように設定する必要があります。

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

より高い値を設定すると、古いブラウザで問題が発生する可能性があります。

Cookieに関するRFC も参照してください:

Max-Age=value
  OPTIONAL.  The value of the Max-Age attribute is delta-seconds,
  the lifetime of the cookie in seconds, a decimal non-negative
  integer.  To handle cached cookies correctly, a client SHOULD
  calculate the age of the cookie according to the age calculation
  rules in the HTTP/1.1 specification [RFC2616].  When the age is
  greater than delta-seconds seconds, the client SHOULD discard the
  cookie.  A value of zero means the cookie SHOULD be discarded
  immediately.

および RFC 2616、14.6年齢

キャッシュが表すことができる最大の正の整数より大きい値を受信した場合、またはその年齢計算のいずれかがオーバーフローした場合、2147483648(2 ^ 31)の値を持つAgeヘッダーを送信する必要があります。

http://www.faqs.org/rfcs/rfc2616.html

65
PiTheNumber

遠い将来の絶対時間を設定

setcookie("CookieName", "CookieValue", 2147483647);

受け入れられた回答で推奨されているように、現在を基準にして計算するよりも絶対時間を使用する方が適切です。

32ビットシステムと互換性のある最大値は次のとおりです。

2147483647 = 2^31 = ~year 2038
33
David

私の特権により、最初の投稿にコメントすることができないため、ここに移動する必要があります。

2038 unix bug を考慮に入れる必要があります。これは、上記の正しい答えとして提案されている現在の日付から20年前に設定する場合です。

2018年1月19日+(20年)のCookieは、ブラウザや実行するバージョンによっては2038の問題を引き起こす可能性があります。

13
John

終わりのないループを言うことはできません。Cookieは現在の日付+ 1で期限切れになり、常に明日であるため期限切れの日付に達することはありませんか?少しやり過ぎですが、ただ言っています。

6
Jesus

これは完全に不可能ですが、Googleの場合と同様の操作を行い、Cookieを2038年1月17日に期限切れになるように設定することもできます。

実用的には、Cookieを10年間または60 * 60 * 24 * 365 * 10に設定する方が良いかもしれません。これは、Cookieが存続するほとんどのマシンより長持ちするはずです。

6
h3r2on

クライアントマシン上のデータを永続的に保持する場合、または少なくともブラウザのキャッシュが完全に空になるまで保持する場合は、Javascriptローカルストレージを使用します。

https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage

セッションストレージは使用しないでください。最大保存期間がゼロのCookieのようにクリアされます。

4
Björn

Cookieを永久に存続させる方法はないと思いますが、2100年など、将来的に期限が切れるように設定する必要があります。

0
Joel Kennedy

有効期限を今+ 100年に設定するとどうなりますか?

0
Boris Delormas

あなたはそれをするべきではありません、とにかくそれは不可能です、あなたが望むなら、あなたは10年先などのより大きな値を設定することができます。

ところで、私はそのような要件を持つクッキーを見たことがありません:)

0
Sarfraz