ユーザー認証でユーザーID毎にリンク先振り分ける方法

このQ&Aのポイント
  • ユーザーID毎にリンク先を振り分ける方法についての解説
  • ユーザー認証を行い、リンク先をユーザーIDに応じて振り分ける方法を紹介
  • ユーザーIDごとに異なるリンク先を設定するための方法を詳しく解説
回答を見る
  • ベストアンサー

ユーザー認証でユーザーID毎にリンク先振り分ける方法

まずは以下のサイトをごらんいただきたいのですが、 http://www.komonet.ne.jp/~php/program/ninsho/chap1.htm このソースを改造してユーザーID毎でリンク先を振り分けたいと思っています。 私事で恐縮なのですが、実はサークルのメンバー用HPを立ち上げなくてはならず、 早急にログインプログラムを作成しなくてはなりませんが、なにぶん知識がありません。 どうかお力をお貸しいただけないでしょうか? よろしくお願いいたします。 なお、ソースを作成なさった方には改造や教えて!gooなどに掲載して質問をするなどについて、一切の免責は得ております。 かなり困ってます。どうかよろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

初心者でもいいんです。とにかくプログラムというものは一気には出来上がりません。一段一段でいいですから上がって行きましょう。ベテランでも初心者でも一つ一つ作っていかなければならないのは同じですから。 ・session_open よくわからなければ、おまじないだと思って頭の方に入れて下さい。単純な作りのサイトであれば、全ページに入っていても不具合はないと思います。非常に簡単に言うと、この関数の実行以降、$_SESSION変数の読み書きができるようになります。ログインのチェックとは、認証後に例えば$_SESSION["login"]という変数にtrueを入れたとしたら、次のページのsession_open後に$_SESSION["login"]の値がtrueになっています。つまり値が引き継がれたわけです。もしtrueでなければログイン認証が行われてないと判断してエラーメッセージなりを出すようにするだけです。 ・メンバーの種類 補足のようにするのであれば、ユーザーファイルにデータを一つ足してあげないといけません。数字で扱うのが解りやすいので (1)幹事長等サークル幹部・・・1 (2)WEB兼広報担当者・・・2 (3)一般サークルメンバ・・・3 と数字を割り当てましょう。defineを使って define(USER_MANAGER,1); define(USER_WEBMASTER,2); define(USER_MEMBER,3); なんて感じにすると美しいでしょう。 そしてユーザーデータのファイルにデータを足します。 komochan,777,1(幹部) komo,888,2(広報) てな感じです。ちなみに末尾の,が無くても動くと思うんだけどなぁ。 で、このデータを読み込んで分解しているところを list($id,$pass,$page) = split(",", $p_data[$i]); てな感じにしてあげればいいんじゃないですか? それに伴ってheader関数は header("Location: http://~/user_".$page.".php"); となるかと思います。 以上で、少なくともヒントになったとは思いますが。

narakei1984
質問者

お礼

ありがとうございました。仰るとおりヒントとなりました。 あとは友達と試行錯誤して進めていきたいと思います。 また機会がありましたらよろしくお願いいたします。

その他の回答 (1)

回答No.1

期待する動作としては、ログインの認証をした後、そのユーザー固有のページに飛ばすという感じですか?飛ばす先はユーザーの数分のHTMLファイル(ログイン認証すると)があると考えて良いでしょうか。 したら例えば公開ディレクトリに一つusr/のようなサブディレクトリを作成し、そこにuser_[USERID].phpのようなユーザー専用のページを置きます。 リンク先のスクリプトで修正する部分は if($p_flag > 0){   echo "<FONT COLOR='red'>おめでとうございます。あなたは正式に認証されました。</FONT>\n";  } else { ここですね。ここでメッセージを出す代わりに、header("Location: http://~/user_".$u_id.".php"); にリダイレクトをさせるような感じになるかと思います。 実際にはリダイレクト先のユーザーページでもログイン済みかどうかのチェックが必要だと思います。sessionを使えば簡単でしょうね。session_openをした後で$_SESSION["login"]等の変数をtrueにして、それをリダイレクト先でチェックするような構造になるかと思います。 ざっくり超簡単に考えただけなので、もう一工夫必要かも知れませんが。

narakei1984
質問者

補足

早速の回答ありがとうございました。 本当にご丁寧で、具体的なソースまで一部書いていただきまして大変感謝しております。 ただ、正直申し上げて、あまりに初心者すぎて、 わからない部分があります。 初心者がこのようなサイトを作ろうとしていること自体、あきれられてしまうかもしれませんが、どうか教えてください。 まず、sessionというものについてですが、 session_openというのはどういうことなのでしょうか?具体的にログイン済みかどうかのチェックをするスクリプトとはどのように定義すればいいのでしょうか…。ソースのサンプルのページなどがあれば教えてください。 あと、ユーザーの分類として考えているのが、 (1)幹事長等サークル幹部 (2)WEB兼広報担当者 (3)一般サークルメンバ なのですが、IDとパスワードは一人一人別のものにしたいのです。 具体的に言うと、 (1)に分類される人は9名 (2)に分類される人は4名 (3)に分類される人は59名 です。 この数を個々一つずつhtmlファイルを作るのは大変かと思うので、認証後に 幹事長の人が自分のIDとパスワードを入力→(1)のページ 副幹事長の人が自分のIDとパスワードを入力→(1)のページ 広報局長の人が自分のIDとパスワードを入力→(2)のページ 普通のメンバの人がIDとパスワードを入力→(3)のページ というように指定したいのです。

関連するQ&A

  • BASIC認証のユーザー名をPHPで取得したい

    とあるレンタルサーバで、 BASIC認証のホームページを作成しております。 BASIC認証は「.htaccess」で AuthType Basic AuthName "メンバー専用ページ" AuthUserFile "ファイルパス" require valid-user ログイン後のページにアクセス解析機能をつけたいと思っていますが、BASICで入力したログインのユーザ名が取得できなくて困っております。 echo "test1:" . $_REQUEST['PHP_AUTH_USER']. "<br />\n"; echo "test2:" . $_SERVER['PHP_AUTH_USER']. "<br />\n"; echo "test3:" . $PHP_AUTH_USER . "<br />\n"; と書いて画面に出力してみましたが、正しくログインしていても 空又はNULLの状態です。 Apacheの設定?phpの設定?ソースコードの間違え? などわからない状態になっています。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 基本認証によるHPアクセス制限がうまくいきません。

    どこが間違っているのかお教えください。 今回どうしてもアクセス制限を設けたホームページが必要となり、 初めて挑戦することにしました。 それで 初心者用の指導頁 http://allabout.co.jp/gm/gc/23780/2/ に従って作成することにしました。 HPのURLが http://cch92260.digi2.jp/ とした場合でお願いします。 ここにindex.htmで置く表紙にはアクセス制限はかけません。 この表紙に 「メンバー」 という文字を置いてここに飛びたい頁(メンバーページ)へのリンクを設けます。 で、「メンバー」の文字をクリックすると、IDとパスワードを入力画面が現れ、 入力するとメンバー頁に飛ぶようにしたいのです。 それで、 http://allabout.co.jp/gm/gc/23780/2/  を参考にしながら まず、次のようなファイルを作成しました。 AuthType Basic AuthName "Input your ID and Password." AuthUserFile /home/member/passwd.dat require valid-user これを .htaccess というファイル名で保存しました。 次に member  というフォルダを作成しアップし、この中へメンバーページと.htaccess をロードアップしたのです。 つまり、/の下に member というフォルダとindex.htmを置き、 memberの下に .htaccess とメンバーページを置いたことになります。 次に、IDとパスワード格納ファイルを作成するのですが、 上記参考HPで紹介されたTelnetを起動する方法はうまくいかなかったので、 htpasswd作成サイトでIDとパスワード暗号を作りました。 そこで、 ID(test)とパスワード(home)の暗号は test:4a1Gz.hAvFU6A  となりましたので、 これを passwd.dat  というファイル名で保存し、 上記フォルダ member内に にアップロードしました。 ここまで来てテストしてみました。 先ず、表紙にアクセスし、表紙に置かれた「メンバー」の文字をクリックすると、 IDとパスワードを求めるダイアログが表示されたところまでは良かったのですが、 IDとパスワードを入力すると、 IDの欄はtest が入力されていてパスワードの欄は空白でメンバーページへは飛んでくれません。 誠に拙い説明で恐縮ですが、もし以上で問題点が分かればお教え頂きたく、 よろしくお願い致します。

  • あるフレームを別ページへリンクするには

    仕事でHTML画面を作成しているのですが、非常に困っている画面があります。 まずはこちらのHTMLソースをご覧ください。 http://www.hidecnet.ne.jp/~uru/sample.htm 上記画面なんですが、見たとおりフレーム分割した中にまたフレームと。 かなり複雑にフレーム分割しているのですが、この中にフレーム名が"frmB_B_A2"という 画面があります。 その画面(frmB_B_A2.htm)で、 <a href="xxxx.htm">中段(ミドル)のフレームを更新</a> と記述すると別画面(xxxx.htm)へリンクした場合"frmB_B_A2"という画面(自分自身)がリンクされます。 (当たり前の話ですが) これとは別に"frmB"というフレームに、"xxxx.htm"へリンクさせる場合場合、 どのように記述すれば宜しいでしょうか?  かなり複雑な質問で申し訳ありませんが、宜しく御願い致します。

    • ベストアンサー
    • HTML
  • HTMLに埋め込んだGoogleカレンダーの予定が表示されない

    サークルの予定をGoogleカレンダーに入力し、カレンダー埋め込み支援ツールを使ってサークルのホームページに貼りつけてメンバーに見せようとしたのですが、カレンダーを作成したアカウントでログインしているパソコンでしか予定が表示されません。 ログインしていないパソコンで見るとただの祝日しか表示されません。 ほかのメンバーはGoogleアカウントを持っていないので、HTMLで予定だけ見てもらおうと思ったのですが、それはできないのでしょうか。 でもそうすると、メンバーみんなGoogleアカウントを取得して、自分のカレンダーにサークルのカレンダーを追加しないといけないのでしょうか。 全員にGoogleアカウントを取得させるにも、人数が多くて頼みきれないのですが何か良い方法はないでしょうか。

  • ユーザー認証&リンク先振り分け

    下記のようなプログラムにてユーザー認証&リンク先の振り分けを考えているのですが、上手に出来ません。どこか問題がありましたら教えていただけないでしょうか?エラー構文などは出ないのですが、フォーム上からユーザーIDとパスワードを入力してもうまくページが切り替わらず、同じログインフォームのページが開いてしまうのです。 <?php // $data_file = "d_file.dat"; //データファイルの指定 $authlevel = 0; //権限レベル if($action == "post"){ $p_data = file($data_file); $p_flag = 0; for($i=0; $i<count($p_data); $i++){ list($id,$pass,$authlv) = split(",", $p_data[$i]); if($id == $u_id && $pass == $passwd){ $authlevel = $authlv; //権限レベルを読む $p_flag++; } } if($p_flag > 0){ switch (authlevel){ case 1: require ("http://www.dell.com"); break; case 2: require ("http://www.whitehouse.gov"); break; case 3: require ("http://www.yahoo.com"); break; case 4: require ("http://www.google.com"); break; case 5: require ("http://www.yahoo.co.jp"); break; default://上記以外 require ("http://www.kantei.go.jp"); break; //echo "<CENTER><BR><BR><BR><FONT COLOR='blue'>おめでとうございます。あなたは正式に認証されました。<BR><BR>\n"; //echo "ここにお好きなHTML表示を埋め込んで下さい。</FONT>\n"; } } else { echo "<CENTER><BR><BR><BR><FONT COLOR='red'>ユーザーIDとパスワードが間違っています。やり直して下さい。</FONT>\n"; } } ?> ちなみに、パスワードファイル(d_file.dat)には (ユーザーID),(パスワード),(権限レベル), と記述したファイルを用意しました。

    • ベストアンサー
    • PHP
  • ガンプラの歴史に詳しい方へ

    初めて質問させて頂きます。 ガンダム(ガンプラ)に詳しい方にお伺いしたいのですが、今アニメ化されているクロスボーンガンダムとは別に、ドクロをあしらったガンダムをご存知の方いらっしゃいませんでしょうか? といいますのも、クロスボーンを見た時に過去(恐らく10年以上前)に読んだ書籍(ガンプラ改造系の本。雑誌だったかは不明)に「読者が考えたガンダム」の様なモノで賞を取った「ドクロをあしらった黒基調のガンダム」がプラモデル化(販売されたかは不明)した記事を写真付きで掲載されていた記憶をふと思い出し気になって調べていたのですが、なにぶん10年以上前の紙媒体の情報なのでソースが発見できず…モヤモヤしている状態です。 つきまして、上記のようなガンダムを見た覚えが有るか無いか、ある方は出来ればソース乃至ガンダムの名称などを教えて頂けないでしょうか。 ふわふわとした質問で恐縮ですが、どうかよろしくお願いいたします。

  • リンク先に二つのidを付けたい

    諸事情により、二つのリンク元から1つのリンク先に行きたいのですが、 <html> <head> <title>test</title> </head> <body> <a href="#リンク先1">リンク元1</a> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <div id="リンク先1 リンク先2">リンク先</div> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <a href="#リンク先2">リンク元2</a> </body> </html> このコードだとうまくいきません。 <div id="リンク先1 id="リンク先2">リンク先</div> でもダメでした。 <html> <head> <title>test</title> </head> <body> <a href="#リンク先">リンク元1</a> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <div id="リンク先">リンク先</div> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <Br><Br><Br><Br><Br><Br><Br> <a href="#リンク先">リンク元2</a> </body> </html> こうすればいいのですが、 諸事情で、二つのリンク先の名前を使いたいです。

    • ベストアンサー
    • HTML
  • ユーザ認証の方法について教えてください

    インターネット経由でアクセスしてくるユーザーに、 ユーザー名とパスワードを入力させて、認証を通過したユーザのみ アクセス可能にしたいです。 ハードウェアの購入(特定のルータなど)が必要でしょうか。 HTTPサーバはIISを使っています。 費用が安くて、簡単な方法を教えてほしいです。

  • パスワード認証後にリンク先を振り分けたいのですが・・。

    cgi初心者のdejifuraと申します。どうか助けてください。 「パスワード認証後に、ユーザーIDごとにそれぞれのページへリンクさせたい。」 「ユーザーIDが○○(完全一致)ならば、http://www.dejifura.com/○○.htmlへリンクする」 以上の内容を行いたく、パスワード認証のCGI設置はできたのですが、それ以降がわかりません。 リンク先を振り分けるCGIを一度ダウンロードにしたのですが、私の力では振り分け条件を変更することができませんでした(設置場所がおかしいのかも)。ぴったりのCGIがダウンロードできる場所か、振り分け条件の変更方法のわかる方がいらっしゃいましたらどうか助けてください。

    • 締切済み
    • CGI
  • .sqlのファイルをそのままコマンドプロンプトから読み込んで、テーブルを作成する方法

    コマンドクライアントから"\.m_member.sql"などと入力してテーブルを作成する方法がありますが、どうやってやるでしょうか? (要するにはエディタでmysqlコードを書いて、.sql拡張子で保存して、コマンドプロンプトから、その.sqlのついたファイルをそのまま読み込んで自動的にテーブルを作成するみたいな感じだと思いますが…) まず、コマンドプロンプトを立ち上げて、 "mysql -u ○○×× -p ○○××"と入力して Enter password:と入力要求されたら、そのままパスワードを入力してSQLにログインします。 そして、mysql>と入力要求されたら、 "mysql>\.m_member.sql"と入力したところ、 ERROR: Usage: \. <filename> | source <filename> と表示されてしまいます。 このようなメッセージが表示したら、どのように入力すれば宜しいでしょうか。

    • ベストアンサー
    • MySQL

専門家に質問してみよう