見てみると、クッキーの設定にPHPのドキュメント私はクッキーの有効期限を設定することができていることがわかります。ブラウザセッションの終了時または将来のある時点でCookieが期限切れになるように設定できますが、Cookieが期限切れにならないように設定する方法がわかりません。これは可能ですか?これはどのように達成されますか?
$cookie->setMaxAge(2147483647);
、2080以降で32ビットと64ビットの両方で動作するを使用できます
見てみると、クッキーの設定にPHPのドキュメント私はクッキーの有効期限を設定することができていることがわかります。ブラウザセッションの終了時または将来のある時点でCookieが期限切れになるように設定できますが、Cookieが期限切れにならないように設定する方法がわかりません。これは可能ですか?これはどのように達成されますか?
$cookie->setMaxAge(2147483647);
、2080以降で32ビットと64ビットの両方で動作するを使用できます
回答:
すべての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)の値を持つ経過時間ヘッダーを送信する必要があります。
はるか未来の絶対時間を設定します。
setcookie("CookieName", "CookieValue", 2147483647);
受け入れられた回答で推奨されているように、現在に対して相対的な時間を計算するよりも、絶対時間を使用することをお勧めします。
32ビットシステムと互換性のある最大値は次のとおりです。
2147483647 = 2^31 = ~year 2038
私の特権のため、最初の投稿にコメントを付けることができないため、ここに投稿する必要があります。
上記の正解として提案されている現在の日付から20年前に設定する場合、2038のUNIXバグを考慮する必要があります。
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と同じように消去されるため、セッションストレージは使用しないでください。
あなたはそれをすべきではなく、それはとにかく不可能です、あなたが望むなら、あなたは10年先などのより大きな値を設定することができます。
ちなみに、私はそのような要件を持つクッキーを見たことがありません:)
よくわかりませんが、ブラウザを閉じるときにCookieは削除されませんか?私はどういうわけか、決して有効期限のないCookieを実行し、Chromeは有効期限を「ブラウザ終了時」として認識しました...