電子書籍の厳選無料作品が豊富!

最近phpを始めたばかりの初心者です。

簡易的なアクセス認証?のようなものを作っています。
実行すると、フォームが現れ、パスワード「12345」を入れると
includeのindex.incを表示し、
パスワードが合っていなければ「パスワードが違います」と表示させるように以下のコードを書きました。(かなり稚拙なコードで見難いとは思いますが。。)

<?php
$pass = $_POST['pass'];
if ($pass=="12345"){
include("index.inc");
exit;
}elseif ($pass!="12345"){
echo 'パスワードが違います';

}else{

echo '
<form method="post" action="';
echo $PHP_SELF;
echo '">
<input type="password" name="pass"></form>
パスワードを入れてください';
}?>

で、一応は動作するのですが、ページをリロードさせるとブラウザから「フォームのデータを再送信します」旨のアラートが出ます。

ここで困っています。
パスワードを間違った場合、ブラウザのバックで戻る事で、入力フォームには戻れますが、もしそのままリロードしてしまうと、誤ったデータがキャッシュに入ったまま再入力されてしまい、再度このphpに戻っても「パスワードが違います」という表示のままになってしま、フォームが現れません。
また、一旦ページを閉じたり、別のページに飛んでも、このphpに入ったときには再度パスワードを入力させたいと思います。

ブラウザのキャッシュに問題があると思い、
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-control" CONTENT="no-cache">
<META http-equiv="Expires" content="0">
を追加してみたのですが、うまく行きません。

どのようにしたら良いのでしょうか?
なるべく簡易的なものを考えています。
が、やはりセッションなどを使う事になるのでしょうか。。

A 回答 (1件)

パスワードが渡されればチェックをして、


パスワードが渡されない場合は入力欄を表示するようにすればいいと思われます。


if($_POST['pass']){

#Pass Check
if ($_POST['pass'] == '12345') {
include("index.inc");
exit;
} else {
echo "NG";
echo "<form action=\"xx.php\" method=\"POST\">";
echo "<input type=\"submit\" value=\"戻る\">";
echo "</form>";
}

} else {

echo <<<HTML
<form action="xxx.php" method="POST">
<input type="password" name="pass">
</form>
HTML

}


むしろ NG のところにパスワード入力フォームを表示させればはやいんですけどもね。


あと、パスワードは暗号化したほうが安全です。
遊び程度ならいりませんけどもね。

参考URL:http://php.s3.to/man/function.crypt.html
    • good
    • 0
この回答へのお礼

うまく行きました。
キャッシュ云々とか難しく考えなくても、NGの所にもパスワードの入力フォーム入れるだけで良かったんですね。

それにしても自分のコードの幼稚さがよくわかりました。。
もう少し勉強します。

大変参考になりました。
ありがとうございました!!

お礼日時:2005/04/05 19:47

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