PearにはAuthという認証専用のモジュールがあります。
ログイン時の認証を行う場合、結構便利に使用することができます。
このAuthで認証したページからリダイレクトで別のページに移動したときに、前ページで認証した情報が保持できない現象が発生しました。プログラムは以下の通りで、test1.phpで認証を行い、認証された場合はtest2.phpへ移動するというものです。
test1.php
require_once "Auth.php";
$options = array(
'dsn'=>"mysql://username:password@hostspec/database",
'table'=>"table",
'usernamecol'=>"username",
'passwordcol'=>"password",
'cryptType'=>"md5",
'db_fields'=>'*'
);
$a = new Auth("DB", $options);
$a->start();
if ($a->checkAuth()) {
header('location:http://localhost/test2.php');
exit();
}
exit("test1.php NG");
test2.php
require_once "Auth.php";
$options = array(
'dsn'=>"mysql://username:password@hostspec/database",
'table'=>"table",
'usernamecol'=>"username",
'passwordcol'=>"password",
'cryptType'=>"md5",
'db_fields'=>'*'
);
$a = new Auth("DB", $options);
$a->start();
if ($a->checkAuth()) {
exit("test2.php OK");
}
exit("test2.php NG");
このプログラムをhttp://192.168.0.1/test1.phpにアクセスします。
上記画面のような認証画面が表示されるのでUsernameとPasswordを入力し、[Login]をクリックします。すると通常認証されると
test2.php OK
だけが表示されるのですが、test1.phpと同じ認証画面が表示されます。
もちろん、UsernameとPasswordに間違いは無いものとします。
なぜ、認証されているのにtest2.phpでは認証を求める画面が表示されるかというと、test1.phpのURLとリダイレクトをするURLが異なるために、このような現象が発生します。
http://localhost/test1.php
と
http://192.168.0.1/test1.php
は同じアドレスなのですが、この様なアドレスの違いで認証ができなくなるようです。
なかなか分かりにくいことなのですが、気がつくと「な〜んだ」ということが多々あります。