- ベストアンサー
オプションメニューのアイテムを保存する方法は
Perl初心者なので、教えて下さい。 オプションメニュー(name=URLs)にアイテムとして複数のURLを書き入れましたが、これをクライアントが保存し、いつでも自動的に呼び出されるようにしたいのですが、次のことが分かりませんのでお教え下さい。 (1)メニューアイテムをどのようなデータとして変数化するのか? (2)クッキーデータのかたちと保存法は? (3)同上 の自動呼び出しの方法とデータ処理方法は?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> オプションメニュー(name=URLs)にアイテムとして複数のURLを書き入れましたが、 <select>~</select>の中に入れる<option>~</option>のことですか? > (1)メニューアイテムをどのようなデータとして変数化するのか? URLであればそのまま文字列として変数へ格納してもOKですが、 セキュリティ上は<option>で設定するvalueへ生URLをそのまま入れるよりも、 valueには"URL01"のようにキーワードとして入れておき、生URLはCGI側で割り当てたほうが良いです。 > (2)クッキーデータのかたちと保存法は? こちらが参考になるかと。 http://tohoho.wakusei.ne.jp/wwwcook.htm > (3)同上 の自動呼び出しの方法とデータ処理方法は? 単にCookieに保存した文字列を、CGIが呼ばれたときに表示するだけならそれほど難しくはないです。 (たぶん2で紹介させてもらっているサイトの説明で概要はつかめるかと思います) <option>に入れた値をどうやってCGIで受け取るのか分らない? どうやってCGIからCookieへ値を 渡す/受け取る のか分らない? ・・・ということであれば補足してくださいね。
その他の回答 (3)
- feininger
- ベストアンサー率41% (74/180)
Cookieって説明するよりも実際に試すのが一番なんですよね。 仕組みはものすごく簡単です。 Cookieはクライアント側に保存されます。 ファイル検索で cookie として検索するといくつかディレクトリが見つかりますが、 そのどれかのディレクトリにファイルとして保存されています。 どれでもいいので実際にCookieの中身を見てください。メモ帳(TeraPadがおすすめ)で開けます。 *** このファイルってどうやってできたの? *** PerlでCookieをブラウザへ渡すのはこんな感じ↓です。 print 'Content-type: text/html'."\n"; print 'Set-Cookie: data=value1&value2; expires=Thu, 1-Jan-2030 00:00:00 GMT;'."\n"; print "\n"; print '<html><body>Cookie Test</body></html>'; これ↑を実行するとブラウザには Cookie Test と表示されるだけですが、 表示と同時にCookieのファイルが「クライアント側に」生まれます。 実際にファイルが生まれたかどうかを確認してみてください。 (ちなみに改行、つまり\nは重要な意味を持っています) *** じゃあ、このファイルをどうやってPerlで受け取るの? *** ブラウザは「そのサイトへ渡すべきCookie」が存在していれば勝手にサーバー側へ渡します。 Perlでは渡されたCookieを変数 $ENV{'HTTP_COOKIE'} に格納します。 実際に $ENV{'HTTP_COOKIE'} になにが格納されているか確認してみてください。 > トホホさんのCookieを読んでも、日付や時刻の例ですね。 やりとりするCookieのデータは文字列であればなんでもかまいません。 複数のデータを格納したいときは & で区切るなど、それは自分流のルールでOKです。 ただ、注意点としてセパレータ文字(;や=など)や漢字はエンコードしないと動作がおかしくなります。 ・・・というのをふまえて、とほほさんのサイトをもう一度読んでみるとよいかと。
お礼
feiningerさま、ご回答ありがとうございました。 >Cookieって説明するよりも実際に試すのが一番なんですよね。 >仕組みはものすごく簡単です。 そうですか。。初心者の私にはどうもむずかしくて。。「Perl でCookie !」できるように勉強します。 ありがとうございました。
- feininger
- ベストアンサー率41% (74/180)
ちょっと訂正。 もしかすると送信ボタンにはnameを設定しないほうがよいかもしれません。 誤:<input type="submit" name="submit_button" value="送信"> 正:<input type="submit" value="送信"> onChangeイベントで呼び出した時と、送信ボタンのクリックで呼び出した時とで、 動作が微妙に異なるみたいだから。
お礼
feininger さま、詳しいアドバイスを何度もいただいております。ありがとうございます。 私のお願いが舌足らずでした。下のは今悪戦苦闘中の私のサイトです。 http://tovalis.or.tv/dic/tangokensaku.htm このように、希望するURLをメニューに書き込める所まではJavaScript の質問コーナーのほうでlead1976 様 からお教えいただいたおかげで、できております。 今の問題は:このメニュー内のデータをクッキーに格納させるスクリプトが分からない、です。JavaScript、Perl どちらでも良いみたいですが、そうですか? ここでは、ぜひPerl で変数$URLsData としてクッキーに書き込み、クライアントがこのページを開くたびにこのデータがメニューに表示されるようにしたいのです。。。 feininger さん、いつも私の説明に欠陥があるためご苦労をお掛けしております。ここまで進んで来られたのもこの質問コーナーのお陰です。。。
- feininger
- ベストアンサー率41% (74/180)
onChangeイベントでCGIを呼び出したかったのですね。 こういうの↓はどうですか?(とりあえずGETを使用) <form name="select_url" action="http://www.***.com/cgi-bin/hoge.cgi" method="GET"> <select name="urls" onChange="select_url.submit()"> <option value="url00" selected>URLは?</option> <option value="url01">http://www.goo.ne.jp/</option> <option value="url01">http://www.google.co.jp/</option> </select> <input type="submit" name="submit_button" value="送信"> </form> 送信ボタンは削除してもかまいませんが、 JavaScriptをOffにしているユーザーのために残しておくのも親切かと。
補足
Feininger様、引き続きお世話になります。 <<option>に入れた値をどうやってCGIで受け取るのか分らない? はい、そうなんです。 <select name="URLs" onChange="f1move();"> <OPTION selected>ここを押してサイト選択してください</OPTION> </select> こうやってどんどん追加したURLをCGIで$data_URLs という変数に格納して、クッキーに書き込むの方針なのですが、トホホさんのCookieを読んでも、日付や時刻の例ですね。そうでなくて、このデータ一つとexpireだけを書き込み保存し、再度読み出すにはどうすべきかを、これからご指示のとおり考えようと思います。