プロが教えるわが家の防犯対策術!

 一応コンセプトから話させてもらいます。まず、登録画面でメールアドレスとパスを入力してもらい、そのメールアドレスにクイズページのアドレスが届く。次にそのアドレスへ行くとベーシック認証画面(.htaccess)になり、アドレスとパスを入力します。
 で、認証し終えると、トップ画面でクイズA,B,Cを選択しろみたいな画面をだし、選択をすると、各々のクイズ画面HTMLへジャンプする。でクイズ画面で回答を入力し、送信すると、回答ありがとうという画面がCGIで表示され、かつ回答内容が保存され、トップ画面へ自動で戻るようになっています。
 一応、ここまでは動作を確認しているので、終了するたびに、次のクイズに行ってもらえば問題はないのですが、それだけだと少し味気ない+もしユーザーが日を改めて回答をするとき、どのクイズを回答し終えたかわからなくなると困るので、クイズを終えるたびにトップ画面にあなたはA,Bを終えていますみたいな表示を出したいのです。
 多分、回答ありがとうのCGIあたりでアクセスログ?を取って、トップ画面でそのログを読み取り、あなたはAをクリアしてます、みたくすれば良いかな?とは思っているのですが、具体的な方法が浮かばないので、解決法をお願いいたします。

A 回答 (2件)

ブラウザのセキュリティ設定にもよりますが、ブラウザにCookieを喰わせるのはダメでしょうか?


JavaScriptでもできますし、サーバサイドプログラムでも可能です。
クイズのページで、回答した質問番号をブラウザにCookieとして喰わせておいて、トップページではそのCookieを読み取って、質問番号を判断して表示するというのが楽ではないかと思います。

この回答への補足

回答ありがとうございます。cookieはまだ使ったことがないので今、調べているのですが、ただ、クイズが複数問あるので、cookieを使うとしたらやはりCGIの画面にアクセスしたときのcookieを食う方が良いかもしれないと思いました。

補足日時:2008/06/13 19:00
    • good
    • 0
この回答へのお礼

CGIの画面で、
print "Content-type: text/html\n";
print "Set-Cookie: NAME=quizA;";Tue, 31-Dec-2030 23:59:59;
print "\n";

トップ画面で、
alert(document.cookie);
if(???)
document.write("あなたはAをクリアしましたね")

みたいな感じですかね?
???部分がどうすればいいかよくわからないので、できればソース等を考えていただけると幸いです。

お礼日時:2008/06/13 19:15

サーバサイドでのプログラミングのほうが得手なのでしたら、JavaScriptでブラウザ側で行うのではなく、トップページもCGIで作ってしまって、そのなかでブラウザに喰わせたクッキーを取得して、返すHTMLに文言を埋め込んだり、あるいは既にクリアした問題にはリンクを張らなくする、というほうがいいと思います。


(クイズなら、補足でおっしゃるとおり、そのほうが分かりやすいでしょうし)

ご存じかもしれませんが参考になるリンクを置いておきます。
ご参照あれ。

参考URL:http://www.tohoho-web.com/wwwcook.htm

この回答への補足

試行錯誤したけっか、
//トップ画面
if(cCookie==""){
document.write("あなたはまだ一問も行っていません")
} else{
document.write("                                            あなたは既に" +cCookie+ "の問題を終了しています")
}
cCookie = document.cookie;

//回答終了のCGI
CGI(1):document.cookie = "A; expires= Sun, 29-Dec-2030 23:59:59";
CGI(2):document.cookie = "B  省略

と、javascriptにそれぞれ記述したのですが、これだと、クリアするたびに、A,Bが上書きされて、どちらか一方しか回答していますが表示されません(てっきり両方とも一遍に表示されると勘違いしてました)。それぞれに数字をつけてfor文でif ccookie=1ならAがクリアみたく回せばなんとかなるかとは思うのですが、なんにしてもCGI(1)とCGI(2)のA,Bがわけて保存されないと話にならないと思います。分けて保存できる方法があれば教えてください。

補足日時:2008/06/16 14:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!