端くれプログラマの備忘録 PHP [PHP] Basic認証を記録する

[PHP] Basic認証を記録する

PHPファイルがパスワード保護されたディレクトリに配置されているサイトで、ユーザがBasic認証を通過し、そのディレクトリ内の任意のPHPファイルに最初にアクセスしたときにログを取りたいというニーズあり。

考え方

Basic認証のユーザ名は$_SERVER[‘PHP_AUTH_USER’]で得られる。

「任意のPHPファイルに最初にアクセスしたとき」となると、認証入力直後にアクセスされたPHPファイルでだけログを取る必要があるけど、これはクッキーを使うことで実現できそう。Basic認証セッションはブラウザを終了することでクリアされるが、有効期限指定無しで作成したクッキーもブラウザの終了と共にクリアされるので都合がいい。

サンプルコード

クッキーを食っていなければ初回アクセス、既に食っていたら初回ではないと判断。

$username = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
if (!empty($username)) {
    if (!isset($_COOKIE['logged_in'])) {
        recordLogin($username);
        setcookie('logged_in', 1);
    }
}