• ベストアンサー

クッキーの有効期限の記述について

クッキーを扱う時に書く、expires(有効期限)の 記載についてですが・・ 最初に曜日を書かなければなりませんが、 この場合、曜日を調べるのが、結構面倒です。 かといって、1年後とかの曜日を、プログラムから 計算するのも、面倒だと思います。 例えば、適当な曜日をセットしたりすると、どうなるのでしょうか。 また、有効期限の設定について、楽な方法、おすすめ な書き方はないでしょうか。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

CGIモジュールを使いましょう use CGI qw(:standard); my $cookie = cookie(-NAME => $name, -VALUE => $value, -EXPIRES => "+1y",); print header(-COOKIE => $cookie); の様にして使えます。 "+3D"(3日)、"+6M"(6ヶ月)などと手軽に期間を指定できます。 詳しくは perlDoc CGI してみて下さい。

noname#10667
質問者

お礼

ありがとうございます。 CGIモジュール使ってみます。 ただ、適当に5年後ぐらいにセットして、曜日を適当 にいれても、クッキーが有効に使えているようです (自分のPC上で、ですが)。 この場合、クッキーはいつまで有効なのでしょうか (恐らく曜日がちがうので、永遠に有効期限が こないのでしょうか)。 付け足しですいません。

その他の回答 (2)

  • hikomin
  • ベストアンサー率63% (40/63)
回答No.3

CGIモジュールを使えば良いですが、クッキーの為だけに使うのはもったいないので、直接作成するサンプルです。 sub returnCookieDate { my $expire = shift | 0; # 期間を取得 my $time = time + $expire; # 期限を設定 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime ($time); my $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; my $monw = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mon]; return sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",$week,$mday,$monw,$year+1900,$hour,$min,$sec); } こんな関数を書いておいて、 my $expire = 1 * 365 * 24 * 60 * 60; # 1年間の秒数 $expire = returnCookieDate($expire); とかやります。(私の場合ですが。)

noname#10667
質問者

お礼

回答ありがとうございます。 モジュールを使わないなら、やっぱり配列を 使うしかないようですね。 ちなみに、先に書きましたが、IEでは、曜日の 設定は無視されているみたいです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>クッキーはいつまで有効なのでしょうか 曜日がでたらめだった時の、有効期限について、 確かなことは言えない(ブラウザによるのかもしれないし)ですが、 私の考えですが、 日付を内部形式(例えばエポック秒:ある基準の日付からの経過秒)で表していると考えられると思います。 その場合、年月日時分秒の情報があれば充分であり、多分、曜日データはそういう内部形式への変換時には使用されない(無視される)のではないかと思います。 チェックの厳しいプログラムがあって、 日付と曜日の対応が正しくないとプログラムが気付いたとして、日付にどう修正をいれるかと考えると、 私なら、どう修正をするのが正しいのかわからないです。一般的にも、その場合の正しい修正というのは、考えにくいと思います。なので、やはり、無視することになろうかと思います。 もし、本当に、その入力が正しくない! と(プログラムが)言いたいなら、クッキーを書き込む要求自体を拒否するのが順当だと思います。 けれども、既に述べたように、曜日情報はとりたてて必要な情報ではないので、書き込みの失敗・拒否とするよりかは、目くじら立てないで、曜日の情報は無視して処理するのがやはり順当だと思います。 以上は、私の推測なので、あまり意味はありませんが、 まあ、曜日が間違えていても使えるならそれでいいかもしれないけど、最悪拒否されてたり、処理されないような場合もあるかもしれないし、積極的にでたらめでもいいと思うよりかは、 なるべくちゃんと書きましょう。 大抵のプログラム言語でGMTとかUTC表現の時刻フォーマットにできると思うので、なるべくそういうものを使いましょう。 くらいのことしか言えません。 長々とありきたりのことしか書けなくてすみません。

noname#10667
質問者

お礼

回答ありがとうございます。 自分で確認してみたところ、IEでは、曜日は確かに 無視されているようでした(曜日をいろいろ変えても 設定日時には、クッキーが削除されました)。

関連するQ&A