Cookieの設定に関するPHPドキュメント を見ると、Cookieの有効期限を設定できることがわかります。ブラウザーセッションの終了時または将来のある時点でCookieを期限切れに設定できますが、Cookieを期限切れにしないように設定する方法がわかりません。これはさらに可能であり、これはどのように達成されますか?
すべてのCookieは Cookie仕様 に従って期限切れになるため、これはPHPの制限ではありません。
はるか未来の日付を使用してください。たとえば、10年で期限切れになるCookieを設定します。
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
32ビットPHPで過去の日付2038を設定すると、数値は折り返され、すぐに期限切れになるCookieを取得することに注意してください。
最大値: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ヘッダーを送信する必要があります。
遠い将来の絶対時間を設定:
setcookie("CookieName", "CookieValue", 2147483647);
受け入れられた回答で推奨されているように、現在を基準にして計算するよりも絶対時間を使用する方が適切です。
32ビットシステムと互換性のある最大値は次のとおりです。
2147483647 = 2^31 = ~year 2038
私の特権により、最初の投稿にコメントすることができないため、ここに移動する必要があります。
2038 unix bug を考慮に入れる必要があります。これは、上記の正しい答えとして提案されている現在の日付から20年前に設定する場合です。
2018年1月19日+(20年)のCookieは、ブラウザや実行するバージョンによっては2038の問題を引き起こす可能性があります。
終わりのないループを言うことはできません。Cookieは現在の日付+ 1で期限切れになり、常に明日であるため期限切れの日付に達することはありませんか?少しやり過ぎですが、ただ言っています。
これは完全に不可能ですが、Googleの場合と同様の操作を行い、Cookieを2038年1月17日に期限切れになるように設定することもできます。
実用的には、Cookieを10年間または60 * 60 * 24 * 365 * 10に設定する方が良いかもしれません。これは、Cookieが存続するほとんどのマシンより長持ちするはずです。
クライアントマシン上のデータを永続的に保持する場合、または少なくともブラウザのキャッシュが完全に空になるまで保持する場合は、Javascriptローカルストレージを使用します。
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
セッションストレージは使用しないでください。最大保存期間がゼロのCookieのようにクリアされます。
Cookieを永久に存続させる方法はないと思いますが、2100年など、将来的に期限が切れるように設定する必要があります。
有効期限を今+ 100年に設定するとどうなりますか?
あなたはそれをするべきではありません、とにかくそれは不可能です、あなたが望むなら、あなたは10年先などのより大きな値を設定することができます。
ところで、私はそのような要件を持つクッキーを見たことがありません:)