戻るボタンで、ログイン中を維持させない。
お世話になっております。
perlで、ログイン(ID、パスワード)するページを作り、
データ入力が終わるとログアウトさせる画面を作っているのですが、
ログアウト(コマンドボタンをクリックしトップページに戻る)したあと、
ブラウザの「戻る」ボタンで戻ると、また、ログイン中になります。
これを、他のサイトでもよく見る「ページの有効期限切れ」にしたいのです。
この種の解決方法は、検索するといろいろ出ていたのですが、
主に、jspで、
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
などで、「httpヘッダやmetaタグでクライアントにキャッシュをさせない」ようにする方法が
一般的なようですが、jspはよくわからなかったので、
perl(.cgi)だけで実現する方法はないのでしょうか。
ソースは、簡単に書くと以下の通りです。(データ入力部は省略)
↓login.cgi------------------------------
:
<form name="frm1" action="logout.cgi" method="post">
ID:<INPUT name="usrid" TYPE="text">
パスワード:<INPUT name="pwd" TYPE="password">
</form>
:
↑login.cgi------------------------------
↓logout.cgi------------------------------
:
<form name="frm1" action="top_page.cgi" method="post">
<input type="button" onClick="submit();" value="ログアウト">
</form>
:
↑logout.cgi------------------------------
行き詰っております。
どなたかご助言賜れませんでしょうか。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
>個人を識別させたいのですが、意味がないのですか。
質問文を読んだ限りでは、個人認証処理に関する記載、及び、それの有効無効の判断に関する判定処理とかあたりが読み取れなかったので、単純にそう書かせていただきました。
認証、及び、それの有効無効判別の処理あたりを補足願います。
と書いておけばよかったですかね。
>>cookieの書き込みはできたのですが、cookieのクリアがされません。
クッキーのクリアに関しては、
・有効期限を過去にして書き込む(→勝手に消えてくれる。
・同じクッキーに対して、「空白」なりなんなりを上書きする。(→ユーザー認証をする上で有効でないクッキーデータにしてしまう。
のが分かりやすいと思いますよ。
両方とも「書き込み」で対処できる内容ですので。
No.3
- 回答日時:
#2追記
データベースを使わないセッション管理方法としてはCookieでセッション管理をする方法もあります
[ログイン]でユーザ情報・有効期限が書かれているCookieの書き込み
[管理画面]Cookieの情報を読み込んでユーザ・パスワードがただしいか確認
[ログアウト]有効期限切れのCookieをだしてCookieの破棄
とほほのCookie入門
http://www.tohoho-web.com/wwwcook.htm
この回答への補足
>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
ご回答ありがとうございます。
ご助言の通り、
>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の書き込みをするのでしょうか。そうでしたら、その方法がわかりません。
いずれにしても、引き続き調査中です。
まずは、経過報告を兼ね、御礼申し上げます。
No.2
- 回答日時:
完全にブロックできるわけではありませんがヘッダに
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
No.1
- 回答日時:
こんちくは。
ん???
「ログインさせる意味」ってあるんですか??
・ログイン画面で、IDPASS入力
↓
・DB参照なり何なりで、OKだったら「ログイン認証OKフラグをたてる」
↓
・ログイン後のページで、「ログイン認証OKフラグ」が立ってたらシステムが使える。
・立ってなきゃ、「ダメ」だから強制遷移なりなんなり。
↓
・ログアウト処理時に「ログイン認証OKフラグ」を消してやる。
↓
・どうやって戻ったとしても、ログイン後ページで「ログイン認証OKフラグがたってなければ使えない」というプログラムにしておけば、問題なし。
んな感じじゃないかと。
少なくとも、「ログイン認証がされたっす」って判別だけは持っておかないと、ログイン後のページのURL直接叩けば誰でもログインせずに利用できることになっちゃいますよ?
>>これを、他のサイトでもよく見る「ページの有効期限切れ」にしたいのです。
これは、ページを表示するに必要な情報を格納しといたものが、消えたためにただ表示できないだけ。
かと思いますよ。多分。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
勝手にログアウトされてしまい...
-
ログイン履歴
-
デュラララのダラーズ見たいな...
-
c# 文字列の最後から1文字削除...
-
Webページ上のボタン等の位置を...
-
ASPで画面間のパラメタ受け渡し
-
asp.NET初心者です。「 ’Contex...
-
テキストボックスのクリックで...
-
Excel:「フォーム」のボタンで...
-
Q&Aフォームを作成したいのです...
-
CD-Rに追記したときに消え去っ...
-
フォームに入力した文字列「○○○」...
-
C#でドラッグ&ドロップが機能し...
-
INPUTのボタン周囲のスペース
-
ボタンを押さずにボタンを押す...
-
複数選択のListBoxでClickイベ...
-
リストビュー内でのドラッグ&...
-
VB.NET 画面遷移
-
javascript 別ウィンドウを開...
-
Eclipseでクリーンが出来ない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPからWindowsログインユーザ...
-
VBAでHTTPログイン
-
勝手にログアウトされてしまい...
-
戻るボタンで、ログイン中を維...
-
青い枠のみのHTML
-
別画面で起動するとログインセ...
-
特定の端末からのみWebシステム...
-
VB6)「DoEvents」について。(...
-
INPUTにnameがない場合のsubmit
-
バッチファイルでログイン後の...
-
えきねっとのログイン画面はどこ?
-
ログインフラグがわかりません。
-
Windows認証でDBにアクセスでき...
-
セッション管理について(同時...
-
2重ログインのチェック
-
エディットボックスの非表示方法
-
セレニウムで自動ログインする方法
-
教えてgooログインについて
-
VBからローカルサーバーにログイン
-
デュラララのダラーズ見たいな...
おすすめ情報