質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

Q&A

解決済

1回答

2048閲覧

pear auth で認証の入れ子

y_repres

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

0グッド

0クリップ

投稿2015/12/14 19:14

編集2015/12/14 19:19

よろしくお願いします。
見様見真似で、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などのファイルも、名やパスワードを保存しているデータベーステーブルも、名を変えて別個に作っています。
それでも思い通りの挙動になりません。

こういう入れ子構造の二重認証の作例などありましたら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PEAR::Authのソースを読んでみたところ、ログイン成功時に代入する$_SESSIONのキー名が_authsession固定になっているため、別のインスタンスになったとしても$_SESSION["_authsession"]を取り合う様な形になります。
そのため、そのままでは複数のログインを管理することは出来ません。

対応方法としては、

  • PEAR::Authを継承してセッション名を変更出来るようなクラスを作り、それを使う
  • 多重ログインにするのではなく、ユーザのテーブルもしくは別のテーブルに権限情報を持たせてID毎にアクセス可能なページを制御する。

といったアプローチになってくるかと思います。

投稿2015/12/14 19:33

tanat

総合スコア18709

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_repres

2015/12/14 19:57

教えていただきありがとうございました。 セッションが固定になってるという発想はありませんでした。はっきり無理とわかってよかったです。 ユーザー毎に権限を持たせる機能を勉強します。 どうもありがとうごいました。
tanat

2015/12/14 20:30

PEAR::AuthはPHP4互換のクラスでプロパティが全てpublicです。 そのため、インスタンスを作成した後に$auth->_sessionName="適当なセッションキー";とかしちゃえば多分動くと思います。 が、_からはじまるプロパティはprivate扱いして欲しいという表現なのであんまりよろしくは無いです。ご参考まで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問