カレッヂ |
質問者 k-taro
投稿日 2/21(金) 18:10:24
caig.cgiの始めのところに ++$countNum; if($countNum>1 && !$ENV{'HTTP_COOKIE'}){&error("Cookieを有効にしてください。");} と記述しましたが、期待通りには表示しません。 何処が悪いのでしょうか? 教えてください。
プロバイダ参照: |
回答者 呑兵衛@大阪
[削除]
投稿日 2/22(土) 19:34:04
cart.cgi がcookie を発行しますが、保存されているかどうかがわかるのは、プログラム上最終確認の時点ですよね。 そもそも ++$countNum; が何によって動くのかわかりません。 cookie データは一度同じドメイン同じディレクトリからHTML出力した後、 そのデータがあるかどうかを、次にアクセスしたとき、$ENV{HTTP_COOKIE}が拾いますので、 最初にかごが表示された段階で評価するにはちょっとしんどいです。 買い物をした後ですと、cookieデータを出力するためHTMLを再出力しなければなりませんので、 一時買い物データを保存するかまたはFORMで再出力する作業がいります。 商品.html がcart.cgi と同じディレクトリにおけるのなら、商品.html に<meta>タグでcookie を記述することも可能です。 cookie認識するかどうかのテストプログラムを別途もうけたほうが早いかと。 |
質問者 k-taro
[削除]
投稿日 2/22(土) 21:02:08
>cart.cgi がcookie を発行しますが、保存されているかどうかがわかるのは、 >プログラム上最終確認の時点ですよね。 最初にcookieの判断をせず、2回目にしようかと考えました。 ご指摘のように、最初から判断するプログラムにすべきです。 cari.cgiにデータが渡された時点で$countNumがカウントされると考えました。 これで二回目に判断するかなと・・・。(そもそも間違いでした。) それでも$countNum>1にすればcookieがセットされたのが分かるかなと思ったのですが、 無理のようですね。 >そもそも ++$countNum; が何によって動くのかわかりません。 全く機能しませんでした。 ><meta>タグでcookie を記述することも可能です。 初回から認識させるには、cart.cgiにデータを渡す段階でcookieの判別できるデータを 渡すべきですね。 >cookie認識するかどうかのテストプログラムを別途もうけたほうが早いかと。 いろいろ試してみます。 |
回答者 呑兵衛@大阪
[削除]
投稿日 2/23(日) 19:59:06
cookie を発行するスクリプトが異なる path を指定してもサーバーが無視すると思い込んでいたけれど 大間違いでした。指定の通りに cookie を食わせることができました。 テストしてみて下さい。 http://www.kosei.nu/cargo608/index_t.html 商品.html <meta http-equiv="Set-Cookie" content="name=COOKIE_TEST; domain=www.hogehoge.com; path=/cgi-bin/shopping;"> cart.cgi cookie のデコード部分 if ($key eq "$ENV{'SCRIPT_NAME'}:0" || $key eq "$ENV{'SCRIPT_NAME'}:1") { :::: } の後で elsif ($key eq 'name') { $COOKIE{$key} = $val; } デコードが終わったあたり $COOKIE{'CART'} =~ s/\D//g; の後で if ($COOKIE{name} !~ /COOKIE_TEST/) { &error('エラー','COOKIEを送ったのに...食べてよ!','3'); } setup.cgi sub error で if ($msg[0] =~ /^!/) { $back = 1; $msg[0] = substr($msg[0],1); } の次に if ($msg[2] =~ /^\d$/) { $go_back = 1; pop(@msg); } 追記と変更 if ($go_back) { print qq#<a href="JavaScript:window.close()">画面を閉じる</a>\n#; } else { print qq#<a href="$nossl\?" target="_self">カートに戻る</a>\n#; print qq# | \n#; print qq#<a href="JavaScript:window.close()">画面を閉じる</a>\n#; } |
回答者 呑兵衛@大阪
[削除]
投稿日 2/23(日) 20:04:35
path の指定は cart.cgi のあるディレクトリを指定すること。 |
質問者 k-taro
[削除]
投稿日 2/24(月) 13:23:24
色々お教えいただき有難う御座いました。 スクリプト自分で作ろうかと思いましたが、 多分出来なかったかもしれません。 早速参考にさせていただきます。 有難う御座いました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |