Authとセッション

広告

マニュアルには特に詳しく書いてありませんでしたがPEAR::Authは認証の処理にセッションを用いています。

セッションが使われているかどうか確認を取るようなメソッドは用意されていませんでしたが、クッキーを使ってセッションIDを管理していると思われるので認証が通った時のクッキーの値を調べてみます。

※PHPでのクッキーについては『クッキーの利用』を参照して下さい。

下記のサンプルでは認証前、そして認証後のクッキーの値を全て表示させてみます。

sample8-1.php

<html>
<head>
<title>PHP認証テスト</title>
</head>
<body>
<?php

require_once "Auth/Auth.php";

function loginFunction($username, $status){
    if ($status == AUTH_WRONG_LOGIN){
        print("ユーザー名又はパスワードが間違っています<br>");
    }

    print("<form method=¥"post¥" action=¥"".$_SERVER['PHP_SELF']."¥">");
    print("<table>");
    print("<tr>");
    print("<td>ユーザー名</td>");
    print("<td><input type=¥"text¥" name=¥"username¥"></td>");
    print("</tr>");
    print("<tr>");
    print("<td>パスワード</td>");
    print("<td><input type=¥"password¥" name=¥"password¥"></td>");
    print("</tr>");
    print("<tr>");
    print("<td colspan=¥"2¥"><input type=¥"submit¥"></td>");
    print("</tr>");
    print("</table>");
    print("</form>");
}

$params = array(
    "dsn" => "mysqli://authuser:authpass@localhost/authdb",
    "table" => "authtable",
    "usernamecol" => "username",
    "passwordcol" => "password"
);

$authobj = new Auth("DB", $params, "loginFunction");

$authobj->start();

if ($authobj->getAuth()){
    print("認証済みです。<br>");
}

print("設定されたクッキーは下記の通りです。<br>");
print_r($_COOKIE);

?>

</body>
</html>

上記をWWWサーバに設置しブラウザで見てみると下記のように表示されます。

PEAR::AUTHでの認証の仕組み

認証前にはクッキーは何もセットされていません。では次に間違ったユーザー名を入力してみます。

PEAR::AUTHでの認証の仕組み

「クエリ送信」ボタンを押すと下記のようになります。

PEAR::AUTHでの認証の仕組み

認証が通らなかった場合でもクッキーはセットされています。クッキー名はPHPでセッションIDを格納する場合に使われる「PHPSESSID」が使われていることからもAuthでは認証の際にセッションを利用していることが想像できます。また認証失敗した場合でもセッションが開始されているのは、認証できなかった情報などをセッションを使って保存していると考えられます。

では次に正しいユーザー名とパスワードを入力して「クエリ送信」ボタンを押してみます。

PEAR::AUTHでの認証の仕組み

認証が通った時にもセッションが使われていると思います。

( Written by Tatsuo Ikura )