質問: よろしくお願いします。 見様見真似で、PHPとMySQLでWebアプリを作っています。 もともとある自分のホームページの一部に組み込んでいこうと思っています。 階層が一番上で、もともとあるmyHomepage.htmlから、その下のwebapp_index.phpに入るときに一度 パスワードを要求してアクセスを制限し、そのwebspp_index.phpにリンクされている、その下の複数のアプリの一覧や各アプリにアクセスするときに、また別のパスワードを要求したいと思っています。 つまり、「家族のホームページ」という最上窓口から、「ママのアプリ一覧」や 「パパのアプリ一覧」などの各インデックスページに行くときにパスワードが必要で、 その「ママのアプリ一覧」ページから「ママの家計簿アプリ」「ママの体重管理アプリ」などの 各アプリに行くときにまた別のパスワードを要求する、ということです。ブックマーク等で「ママの家計簿」にダイレクトに飛ぼうとしても、まず第一認証のログインページに飛ばされ、認証されると続いてママアプリ用のログインページに飛ばされて、そこで認証されてはじめて家計簿アプリを操作できるようにする、という感じ。 そもそもこんなこと可能なんでしょうか? 翔泳社『PEAR入門』を参考にして、第一認証を作ることは出来ました。 (ちょうど、[http://rina.jpn.ph/rance/index.php?PEAR-Auth%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E8%AA%8D%E8%A8%BC] ←これとほぼ同じ書き方です) しかし、その内部にもうひとつ認証による制限を設置することができません。 authクラスのインスタンス名は別にしてますし、それぞれのmylogin.phpやmyauth.phpなどのファイルも、名やパスワードを保存しているデータベーステーブルも、名を変えて別個に作っています。 それでも思い通りの挙動になりません。 こういう入れ子構造の二重認証の作例などありましたら教えてください。
回答: PEAR::Authのソースを読んでみたところ、ログイン成功時に代入する$_SESSIONのキー名が_authsession固定になっているため、別のインスタンスになったとしても$_SESSION["_authsession"]を取り合う様な形になります。 そのため、そのままでは複数のログインを管理することは出来ません。 対応方法としては、 * PEAR::Authを継承してセッション名を変更出来るようなクラスを作り、それを使う * 多重ログインにするのではなく、ユーザのテーブルもしくは別のテーブルに権限情報を持たせてID毎にアクセス可能なページを制御する。 といったアプローチになってくるかと思います。