- ベストアンサー
サイトの入り口で認証処理をしたいのですが、実現方法は?
認証の処理をしたいと思っています。 環境:RedHat Linux, Apache2, PHP4, MySQL 入り口ページでのみ、ログイン処理を行い、 ログインを行った後は、 サイト内を自由に行き来できるようにしようと思っています。 ログインなしで、特定ページにアクセスすると 入り口ページへ飛ばされるようにします。 上記の認証処理を実現しようとした際に、 どのような実現方法がありますでしょうか。 過去に、ASPで行ったことがあり、 その頃はセッション変数で処理していましたが、 それが正しかったのかどうか、わかっておりません。 プログラムのそれなりの知識はあると思いますので、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
.htaccessでの認証は一長一短でしょうね。 設置運用は楽ですが、独自のログインページを制作できませんから、ここのOKweb(Goo?)のようなかんじにはできません。 ディレクトリ単位で隠蔽するので、画像やその他どんなファイルにもアクセスできません。 セッション(若しくはクッキーなど)で行う方法は、各ページに認証ルーチンを埋め込まなければいけないと言う手間がありますが、柔軟に対応できます。もっとも、手間と言っても工夫次第で include 文を1行追加するだけですけど。 しかし、ファイル単位に認証しなければならないため、先の画像ファイルやその他のファイルは URL参照で取得できてしまいます。これも一工夫必要になります。 BASIC認証では一度認証されるとそのディレクトリをアクセスするときに ID/PW を平文で垂れ流し(headerに格納されている)になることを覚えて置いてください。もっともこれはセッション等を使った方法でも最初の1回目は平文で送られてしまいますが(form等)。その後は工夫次第と言うことになります。 いずれもセキュアにするのなら sslを通した方が良いです。
その他の回答 (2)
- mason
- ベストアンサー率56% (9/16)
PHPのセッションはそこまで手間はかからないですよ。 簡単に言えば、ログイン認証後、 <?php //認証確認後 $_SESSION['login'] = "true"; //セッションを登録。 header("Location: ログイン後のページへ飛ばす"); ?> ---------------------------------------------- ログインしたユーザーのみアクセスできるページで ---------------------------------------------- <?php session_start(); //セッション変数を使うのに必要 require_once("auth.php"); ・・・ ?> --------- auth.php --------- <?php if($_SESSION['login'] != "true") header("Location: index.html"); ?> あとは各ページに require_once("auth.php"); session_start(); を追加するだけで、処理できます。 ユーザー名もセッションに $_SESSION['user']等で登録できます。
お礼
ご回答ありがとうございます。 結局.htaccessで実現しました。 あれから色々と調べていたのですが、 PHPでも思っていたより簡単に実装できるようですね。 次回、改良になった際にでも試してみたいと思います。
- yatokesa
- ベストアンサー率40% (201/496)
もっとも楽な方法は apache の BASIC認証を使ってディレクトリごとアクセス制限をする方法だと思います。 .htaccessファイルに必要な情報を書いて、保護したいディレクトリに置きます。すると、そのディレクトリのファイルにアクセスしようとすると認証ダイアログがでます。 セッションを使ってもできますね。しかしこの場合は各ページの先頭で認証処理を動かさないと意味が無く、手軽にと言うわけには行かないと思います。
お礼
ご回答ありがとうございます。 apacheの.htaccessファイルでの対応が 一般的になるのでしょうか。 セッションでの処理では 作業量が多く、手軽には実装できないので、 どのように実現されているのかと悩んでいます。 回答頂いたようにapacheが一番楽に実装できそうですね。
お礼
何度もご回答ありがとうございます。 ログインが必要なページというのは、 今回は管理用ページだけにしようと考えていますので、 apacheで対応しようと思います。 ありがとうございました。