- ベストアンサー
PHPで認証画面に飛ばす
ホームページで、トップページを認証画面として、認証コードが一致すれば、ログインできるようなページをPHPで作りたいと思っています。 認証がOKならば、特定のページへ飛ばして、認証がNGなら再度認証画面へ戻すような感じです。 この場合、例えばURLを直接入力したりとか、お気に入りなどから、ダイレクトに認証画面以外の所へ来た場合、認証させるように認証画面に飛ばすには、どのようにすればよいでしょうか? 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ベーシック認証を利用しない方法で、アクセス制御を実装するほかの方法はないでしょうか? > 例えば、クッキーを利用したアクセス制御の場合、すべてのファイルに認証機能を入れる必要はなくなるのでしょうか? 全てのアクセスを一旦、1つのPHPプログラムにリダイレクトするように .htaccessで指定するという方法があります。 リダイレクトさえたPHPプログラムでは、セッションなりクッキーなりをみて、ログイン済みなら、 リクエスト指定されたファイルを読み込んで 適切なヘッダとファイルの中身を送信し 未ログインなら、ログイン画面(パスワード入力画面)を 表示する ということになります。 この方法なら、BASIC認証と同様に、全てのコンテンツファイルに認証機構を導入する ということをしなくてすみますし、 画像ファイルなども、直リンクされても 認証されてないとアクセスできません。 ただし、全てのファイルがPHP経由になるので、それなりにサーバー負荷は増えます。
その他の回答 (2)
- superside0
- ベストアンサー率64% (461/711)
PHPで認証させたうえで、コンテンツの閲覧を許可するとなると 直リンク防止のためには、全てのPHPに 認証機構を 導入する必要がありますし、 そうしてもPHPファイル以外の、HTMLファイルや画像ファイルに直リンクされた場合は 認証なしで閲覧できてしまいます。 .htaccessファイルでBASIC認証を使うように設定すれば、そのディレクトリ以下の全てのコンテンツは BASIC認証されてないと、アクセスできなくなるので、画像ファイルも守れますし、 既存のHTMLをPHPにして認証機構を埋め込む必要もなくなります。 ただし、ログイン画面は自前の認証画面でなく、ログイン用のダイアログが現れる形になり パスワードのみでなく、 ID+パスワードとなります。 (ログインをキャンセルしたときに、特定の画面にリダイレクトするように設定することは可能です) 用途やセキュリティーレベル(画像ファイルを守る必要があるかどうか) で使い分けると よいと思います。
お礼
ご回答ありがとうございます。 ベーシック認証を利用しない方法で、アクセス制御を実装するほかの方法はないでしょうか? 例えば、クッキーを利用したアクセス制御の場合、すべてのファイルに認証機能を入れる必要はなくなるのでしょうか? 宜しくお願いします。
- nudev
- ベストアンサー率66% (2/3)
よく使われるのは「セッションが無効ならリダイレクト」でしょうか。 全てのページの先頭でログイン判定をして,okなら表示,だめなら認証画面にリダイレクトします。 $_SESSIONに規定の値が含まれているかで判断して header();でリダイレクトします。 しかしながら質問者様のケースでは「認証コードが一致」 という部分が曖昧ですね。 IDとパスワードでアカウント認証なのか,単なるページへのパスワードなのかが不明確です。 後者ならアカウント管理がいらないともとれるので, ログインというよりはパスワードによるアクセス制限という概念になるかと思います。 細かい実装の方法や認証の流れは仕様により何通りか考えられると思います。
お礼
ご回答ありがとうございます。 認証は、IDとパスワードとは異なるパスワードになります。 なので、アカウント管理の必要はありません。おっしゃる通り、アクセス制限となります。 すべてのページにPHPを組み込む方法となると、ページ数が増えた場合に、管理が大変になってくると思いますが、メンテナンスを容易にできる方法はないでしょうか? 不案内なのでトンチンカンかもしれませんが、「.htaccess」などによって制御できたりしないでしょうか?
お礼
ご回答ありがとうございます。 とても解り易く、理解できました。