cookieについて整理したので,実際にPHPでクッキーを使ったセッション情報の管理処理を勉強していた。ネット上のサンプルでのPHPでのクッキーの削除時のExpires属性に,意味不明な数字が指定されていて気持ち悪かったので調べた。結論としては,クッキーの削除時にはExpires属性に1を指定するのがいいだろうと判断した。ネット上のサンプルなどでよく見かける。'/');setcookieの引数は,順番に,クッキー名,クッキー値,Expires属性,Domain属性となる。4引数の意味はわかる。問題なのは,第3引数のExpires属性の指定だ。3600と指定されている。引いた過去の日時を指定している。クッキーを削除するには,Set-CookieヘッダーのExpires属性に過去の日時を指定するしかない。現在日時を指定した場合,一瞬だけブラウザーにクッキーが保存されてしまい,余計な処理が増えてしまう。何らかの数字として,過去の日時を指定するのは問題ない。過去であれば1でも100でも何でもいいのにも関わらず,42000や3600のように意味ありげな数字が指定されているのが気持ち悪い。原因を調べたところ,どうやらこれらの数字は,PHPの公式マニュアルのsetcookie関数とsession_destroy関数で,サンプルとして掲載されている数字だった。公式マニュアルに書かれている内容をそのまま流用しており,コピーペーストで広まったのだろう。そもそもtime関数を使った現在日時からの差分での表現に問題がある。3600などの差分の結果が0になる可能性がある。PHPのsetcookie関数のExpires属性に相当する引数に0を指定した場合,以下に記載がある通り,指定を省いたのと同じで,有効期限がブラウザ終了時と解釈される。Manualつまり,クッキーを削除するどころか値を設定してしまうことになり,意味が全く変わってしまう。差分で値を表現する場合,time関数が万が一下限値を返却した場合に,オーバーフローする可能性がある。time関数の返却値の型はintである。int型の値がオーバーフローした場合,自動的にfloat型に変換される。float型からint型に変換する場合,floatが整数の範囲を超過する場合,結果が未定義となる。返却する場合,setcookieの第3引数のExpires属性はint型なので,未定義の値となりえる。場合,それより過去の日時を指定不可能だ。cookieの仕様としても,Expires属性の値が限界値を超過した場合,限界値とみなされるため,過去の日時の指定が不可能となる。現実問題としてOSの日時が変更されてこのような限界値に達することがあるのかという議論はもちろんある。それをいってしまえば,OSの日時が過去に達することを考慮すること自体が無駄だろう。どちらにしても,過去の日時を差分で表現する場合,値が0になることとオーバーフローの問題を回避できない。したがって,OSの日時が過去になることを考慮しても問題を解決できず,意味がないので,固定値の決め打ちでExpires属性を指定して問題ないように思う。具体的には,以下のようにExpires属性に1を指定する。'/');0は未指定を意味するため,0以外の最小値・最短値として1を選定した。結論PHPでのsetcookie関数によるクッキーの削除方法を検討した。細かいことではあるが,クッキーの削除は基本事項であり,ネット上の情報に揺らぎがあり,気になってしまった。自分なりにどうすればいいか結論を出せたので,今後はこの方針に従う。コメントをキャンセルメールアドレスが公開されることはありません。TOPMENUPostProductPublicBookFoodMTGSocialContact。