トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

CGIプログラミング(050623)

CGIプログラミング(2005/6/23)

 アクセス認証

ApacheなどのWEBサーバにはアクセス認証の機能があります。ここではPHPの認証機能を使います。

アクセス認証には利用者のユーザIDとパスワードが必要です。これらをまとめてアカウントと言います。PHPではアカウントPHPのプログラムに埋め込んでおくか、データベースを利用するかの方法が考えられます。

 セッション管理

HTTPでは同じ利用者が継続して接続しているかを判別できないのでPHPのセッション機能を使って継続的な接続を実現します。

PHPによるアクセス認証

  • 通常はApacheなどのWEBサーバの認証機能を使う
  • 認証にはユーザ名とパスワードを使う
  • Apacheでは専用のコマンドhtpasswdを使って暗号化したパスワードを作る
  • これは指定した場所にファイルとして保存される
  • 認証が必要なフォルダ(ディレクトリ)には.htaccessというファイルを置き、

AllowOverride? AuthConfig?という一文を追加しておく

以下のような設定が必要

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/local/apache/passwd/passwords
Require user rbowen
$_SERVER['PHP_AUTH_USER'] ユーザ名
$_SERVER['PHP_AUTH_PW']   パスワード

ユーザ名とパスワードをどう管理するか

  1. PHPのプログラム内に直接書き込んでおく
  2. データベースを利用する

1は簡単だが大人数への対応に難がある。2はちょっと手間がかかるが大人数に対応しやすい

170ページのプログラム(13-3-1.php)

  • 初めて開いたときは3行目の文で認証ダイアログを表示
  • ユーザ名、パスワードが入力されると7行目以降に処理が移る
    • ユーザ名とパスワードがプログラム中の設定と一致するときは14行目を処理する
    • 一致しなかったら9行目の文でサイド認証用ダイアログを表示

データベースを利用する場合は、あらかじめユーザ情報のデータベースを用意する。

172ページのプログラム(13-3-2.php)

  • 最初にユーザ名とパスワードの入力の有無を調べる
    • いずれかが入力されていないときは認証ダイアログを表示
    • 入力されていれば、それらを変数$idと$pswに代入
    • ユーザ名とパスワードと一致するデータを持つレコードがあるかを検索する
    • 検索結果(件数)を変数$rowに代入し、これが0なら再認証。0でなければ成功

 セッション管理

httpはコネクションレス型の通信(ブラウザとの接続がその場その場で切れる)なので同じユーザからのアクセスなのかを判断できない。そこでクッキーやセッション管理機能を使って同一ユーザからの接続であることを保障する。

  • セッションを始めるには session_start()関数を使う
  • セッションを通して情報を連想配列$_SESSIONを使って保持できる。
  • セッションで保持する情報はサーバ上の指定された場所に保存される。

$_SESSION['count']は添え字countが情報を識別する名前になるこの要素へ代入した値がサーバに保存される


[CGIプログラミング(H17)]