人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PEAR::AUTH別ページからログイン

他のサイトで回答いただけなかったので、こちらでお伺いします。(他サイト削除済み)

【サイト構成】
/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回目の動作でログインさせないことができるのでしょうか?


●質問者: ibun08
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB DSN INDEX localhost password
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tobeoscontinue
●60ポイント

>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()でもいいでしょう。

◎質問者からの返答

"1つ目の規則はフォームの送信先は自分自身であること"

立ち読みした書籍にもそんなことが書かれていました。smartyのようなテンプレートエンジンには最適ってことなんですかねー

logout()はひとつの案ですね。実際に、思わぬ動きがなくなりました。ただ、贅沢を言うと、ブラウザの「戻る」「進む」で既に表示されなくなるし、ページのアクセス毎にDBアクセスが発生してしまうんですよね。

しょうがないのかな。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ