- ベストアンサー
ブラウザの戻るボタンでログイン中を維持しない方法
- perlでログインするページを作成し、戻るボタンでログアウトさせる画面を作りたい。
- ブラウザの「戻る」ボタンを押しても再びログイン中にならないようにしたい。
- 一般的な解決方法は、jspでhttpヘッダやmetaタグを使用してクライアントのキャッシュを制御する方法だが、perlだけで実現する方法はわからない。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>個人を識別させたいのですが、意味がないのですか。 質問文を読んだ限りでは、個人認証処理に関する記載、及び、それの有効無効の判断に関する判定処理とかあたりが読み取れなかったので、単純にそう書かせていただきました。 認証、及び、それの有効無効判別の処理あたりを補足願います。 と書いておけばよかったですかね。 >>cookieの書き込みはできたのですが、cookieのクリアがされません。 クッキーのクリアに関しては、 ・有効期限を過去にして書き込む(→勝手に消えてくれる。 ・同じクッキーに対して、「空白」なりなんなりを上書きする。(→ユーザー認証をする上で有効でないクッキーデータにしてしまう。 のが分かりやすいと思いますよ。 両方とも「書き込み」で対処できる内容ですので。
その他の回答 (3)
- aurumnet
- ベストアンサー率43% (51/117)
#2追記 データベースを使わないセッション管理方法としてはCookieでセッション管理をする方法もあります [ログイン]でユーザ情報・有効期限が書かれているCookieの書き込み [管理画面]Cookieの情報を読み込んでユーザ・パスワードがただしいか確認 [ログアウト]有効期限切れのCookieをだしてCookieの破棄 とほほのCookie入門 http://www.tohoho-web.com/wwwcook.htm
- aurumnet
- ベストアンサー率43% (51/117)
完全にブロックできるわけではありませんがヘッダに Pragma: no-cache Cache-Control: no-cache Expires: Thu, 01 Dec 1994 16:00:00 GMT を追加する 参考URL とほほのwww入門 http://www.tohoho-web.com/wwwxx008.htm ログイン・ログアウトをセッション管理する 参考URL http://d.hatena.ne.jp/jitsu102/20091108/1257680513
- STICKY2006
- ベストアンサー率29% (1536/5269)
こんちくは。 ん??? 「ログインさせる意味」ってあるんですか?? ・ログイン画面で、IDPASS入力 ↓ ・DB参照なり何なりで、OKだったら「ログイン認証OKフラグをたてる」 ↓ ・ログイン後のページで、「ログイン認証OKフラグ」が立ってたらシステムが使える。 ・立ってなきゃ、「ダメ」だから強制遷移なりなんなり。 ↓ ・ログアウト処理時に「ログイン認証OKフラグ」を消してやる。 ↓ ・どうやって戻ったとしても、ログイン後ページで「ログイン認証OKフラグがたってなければ使えない」というプログラムにしておけば、問題なし。 んな感じじゃないかと。 少なくとも、「ログイン認証がされたっす」って判別だけは持っておかないと、ログイン後のページのURL直接叩けば誰でもログインせずに利用できることになっちゃいますよ? >>これを、他のサイトでもよく見る「ページの有効期限切れ」にしたいのです。 これは、ページを表示するに必要な情報を格納しといたものが、消えたためにただ表示できないだけ。 かと思いますよ。多分。
お礼
ご回答ありがとうございます。 >「ログインさせる意味」ってあるんですか?? 個人を識別させたいのですが、意味がないのですか。
お礼
ご回答ありがとうございます。 ご助言の通り、 >Cookieでセッション管理をする方法 でトライしているのですが、 どうもうまくいきません。 まず、 今回の小生のソースプログラム(login.cgi、logout.cgi、top_page.cgi)で言うと、 login.cgiでユーザID、パスワード入力後、 サブミットでlogout.cgiに飛ぶため、 logout.cgi内でユーザ、パスワード判定を行っております。 また、データ入力も、logout.cgi内です。 従いまして、 >[ログイン]でユーザ情報・有効期限が書かれているCookieの書き込み は、サブミット後のlogout.cgi内で処理し、 >[ログアウト]有効期限切れのCookieをだしてCookieの破棄 は、これもサブミット後のtop_page.cgi内で処理するということで、よろしいでしょうか。 これで試してみたのですが、 cookieの書き込みはできたのですが、cookieのクリアがされません。 top_page.cgiから、[戻る]ボタンでlogout.cgiを開くと、 cookieの内容が残っています。 試しに、logout.cgiの先頭のほうに、 &clearCookie(); &getCookie(); を入れて、中身を表示させると、中身が表示されてしまいました。 何か間違っているのでしょうか。 それとも、login.cgi画面でユーザID、パスワード入力後、 サブミットでlogout.cgiに飛ぶ前に、 Cookieの書き込みをするのでしょうか。そうでしたら、その方法がわかりません。 いずれにしても、引き続き調査中です。 まずは、経過報告を兼ね、御礼申し上げます。
補足
>Cookieでセッション管理をする方法 で挑戦しているのですが、 やはり、戻るボタンで戻ると、Cookieの内容が残っていて、 ログイン中になってしまいます。 なんか基本的なところが間違っているような気がします。 以下がテストをしたそのソースです。 ・test01.cgiをログイン、 ・test02.cgiをデータ入力部、 ・test03.cgiをログアウト と見立ててテストしました。 ↓test01.cgi--- #!c:/Perl/bin/perl #↓Cookieへの書き込み print "Content-type: text/html\n"; print "Set-Cookie: "; print "name=1;"; print "expires=Friday, 31-Dec-2100 00:00:00 GMT;\n"; print "\n"; #↑Cookieへの書き込み print <<EOM; <html> <head> : <title>test1</title> </head> <body> <form method="POST" action="test02.cgi"> <p><input type="submit" value="送信" name="submit"></p> </form> </body> </html> EOM ↓test02.cgi--- #!c:/Perl/bin/perl print "Content-type: text/html\n\n"; #↓Cookieの読み込み &getCookie(); $name = $COOKIE{'name'}; if($name eq ""){ # nameがnullならexit; print "<BR>stop!"; exit; } sub getCookie { local($xx, $name, $value); foreach $xx (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $xx); $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; $COOKIE{$name} = $value; } } #↑Cookieの読み込み print <<EOM; <html> <head> : <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <title>test2</title> </head> <body> <form method="POST" action="test03.cgi"> <p><input type="submit" value="送信" name="submit"></p> </form> </body> </html> EOM ↓test03.cgi--- #!c:/Perl/bin/perl #↓Cookieへの書き込み print "Content-type: text/html\n"; print "Set-Cookie: "; print "name=; "; print "expires=Friday, 31-Dec-1900 00:00:00 GMT;\n"; print "\n"; #↑Cookieへの書き込み print <<EOM; <html> <head> : <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <title>test3</title> </head> <body> </body> </html> EOM