他のサイトで回答いただけなかったので、こちらでお伺いします。(他サイト削除済み)
【サイト構成】
/index.php・・・・・・・ユーザID、パスワードの入力欄、入力値を/member/index.phpへsumitするボタンを含む。
/member/index.php・・・・以下のような典型的なコード
<?php
require_once("Auth.php");
function loginFunction($usr, $status){
require_once("loginForm.php");
}
$params = array(
"dsn" => "mysqli://pear:pass@localhost/pear",
"table" => "auth",
"usernamecol" => "username",
"passwordcol" => "password");
$myAuth = new Auth("DB", $params, "loginFunction");
$myAuth -> start();
if($myAuth -> getAuth()){
print("認証済です。");
}
?>
【思わぬ動き】
一度、正しくログインしてから、戻るボタンで/index.phpに戻り、その他のユーザIDを入力してsubmitボタンを押すと、パスワードが空にも関わらず、その他のユーザIDとして認証されてしまう。
【質問】
■authクラスは、他のページのsubmitボタンによってログインしてはいけないといったルールがあるのでしょうか?
■こうなってしまうのはなぜでしょうか?
■auth.phpをどのように加工すれば、上記2回目の動作でログインさせないことができるのでしょうか?
>authクラスは、他のページのsubmitボタンによってログインしてはいけないといったルールがあるのでしょうか?
何処から来たかをチェックする意味がないと思うのでそんなことはないと思うのですが
http://www.phpbook.jp/pear/pear_auth/index2.html
ここでは"1つ目の規則はフォームの送信先は自分自身であること"と書かれています。PEAR:AUTHのマニュアルではそのような規則を見付けることができませんでしたが。
>こうなってしまうのはなぜでしょうか?
Authではセッション管理をしています。一度認証してしまうとセッション情報があればもう認証しているものとして調べないためと思います。
>auth.phpをどのように加工すれば、上記2回目の動作でログインさせないことができるのでしょうか?
$_POST['username']か$_POST['password']が設定されている場合は無条件に再度認証するようにすればいいと思います。
そのため一度logout()してからstart()します。
$myAuth = new Auth("DB", $params, "loginFunction"); if (isset($_POST['username']) || isset($_POST['password'])) $myAuth -> logout(); $myAuth -> start();
/member/index.phpがログイン時だけなら無条件にlogout()でもいいでしょう。