• ベストアンサー

CGIでクッキーを使いたい。書き込みユーザー名を記録したい

今、簡単なケイジバンのCGIを作っていて 書き込みユーザー名を記録しておきたいのですが、 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj15.htm ここを参考にやってみたのですが、 うまく記録してくれません。 (記録してるけど取り出せていないだけ?) 書き込みボタンを押した時に、 書き込みユーザ名に書き込まれたユーザ名を クッキーに保存したいのですが タイミングが分かりません。

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

  • ベストアンサー
  • haigari
  • ベストアンサー率100% (3/3)
回答No.2

ご質問の意図にそっているか自信がありませんが、 Set-Cookieヘッダに 「クッキー変数名」=「クッキーの値」の形で記述して格納し、 読み出す場合は「クッキー変数名」を指定して「クッキーの値」を読み出すようであれば、送信ボタン押下時に実行されるプログラムで、 $cokie_name = $テキストボックス名など; $cokie_value = $入力した値(ユーザ名など); $cokie_value = =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;#エンコード print "Set-Cookie: $cokkie_name=$cokkie_value; expires=$有効期限;domain=$ENV{'HTTP_HOST'};。略。\n"; 等の記述をしてはどうでしょうか? この場合実際ファイルには以下のように書き込まれる はずです。 $cokie_name $cokie_value 。 。 読み出す場合は 環境変数$ENV{'HTTP_COOKIE'} より区切り子ごとにまとまりを切り出し、 切り出した値から変数名と値を取得し、 指定した変数名に一致するものの値を取り出します。 サンプル for $string (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $string); $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;#デコード if($name eq $cookie_name){ return $value; last; } }

参考URL:
http://tohoho.wakusei.ne.jp/wwwcook.htm
SEAMOON
質問者

お礼

ありがとうございます。やってみます!

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

クッキーは、クライアント(たいていWebブラウザ。)側が保持する情報ですので、 1)フォーム送信前に、クライアント側JavaScriptでセットする。 2)フォーム受信後のHTTP応答として、サーバ側でSet-Cookieヘッダをセットする。 ――のどちらかのタイミングで行う事になるかと。 CGIスクリプト内の変数をファイルに書き出してみるなどのデバッギングを行ってみては。

SEAMOON
質問者

お礼

回答ありがとうございます。 補足します。クッキーは保存できて読み出すことも できるのですが、それは単純にセット しただけで、 今、あるテキストボックスに入力した値を 保存しておきたいのです。 ボタンを押して、書き込みを押した時に、 書かれている名前をクッキーに保存したいのですが その場合どこに記述すればよいのかが分からないのです。