MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
PHPの基礎 - ユーザ認証のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
PHPの基礎 - ユーザ認証
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == PHPにおいて、ベーシック認証およびダイジェスト認証を使用して、ユーザ認証する手順を記載する。<br> <br><br> == 認証ダイアログの表示 == HTTPにおいて、ベーシック認証を行う手順は以下の通りである。<br> <br> まず、ユーザ認証が必要なWebページを作成したとする。<br> クライアントから、そのWebページに対してアクセス要求がある時、<code>Authorization</code>ヘッダの有無を確認する。<br> <br> PHPにおいて、<code>Authorization</code>ヘッダの有無を確認する場合、定義済みの変数である<code>$_SERVER</code>の値を確認する。<br> 定義済みの変数<code>$_SERVER</code>は、ヘッダ、パス、スクリプトの位置等の情報を持つ配列である。<br> この配列の中にある<code>PHP_AUTH_USER</code>に対応する値の有無を確認する。<br> <syntaxhighlight lang="php"> if(!isset($_SERVER['PHP_AUTH_USER'])) { // ...略 } </syntaxhighlight> <br> 上記で使用している<code>isset</code>関数は、変数が代入されているかどうかを確認する関数である。<br> bool isset ( mixed var [, mixed var [, ...]] ) パラメータ: var 検査対象の変数 戻り値: varが存在すればtrue、そうでなければfalseを返す。 <br> <code>Authorization</code>ヘッダが無い場合、認証ダイアログをWebブラウザで表示するように、サーバからクライアントへ指示を出す。<br> これには、<code>header</code>関数を使用して、以下のように記述する。<br> <code>header</code>関数は、生のHTTPヘッダをクライアントへ送信するための関数である。<br> <syntaxhighlight lang="php"> if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Private Page"'); header('HTTP/1.0 401 Unauthorized'); } </syntaxhighlight> <br> 詳細は省くが、上記のように、クライアントへ送信するとWebブラウザ上で認証画面が表示される。<br> <br> 認証ダイアログで[キャンセル]ボタンを押下する場合、プログラムの処理は以下の位置から始まる。<br> 以下の例では、[キャンセルボタン]を押下した場合、エラー表示をしてプログラムを終了させている。<br> <syntaxhighlight lang="php"> if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Private Page"'); header('HTTP/1.0 401 Unauthorized'); // [キャンセル]ボタンの押下時の処理 die('このページを見るにはログインが必要です'); } </syntaxhighlight> <br> 認証ダイアログにおいて、ユーザ名とパスワードを入力して[OK]ボタンを押下する時、<br> ユーザ名とパスワードの情報を付加した<code>Authorization</code>ヘッダを、再度、サーバへ送信(リクエスト)する。<br> その時、再度、<code>$_SERVER['PHP_AUTH_USER']</code>に値が設定されているか確認される。<br> <br> 例えば、ユーザ名が未入力の状態でも、$_SERVER['PHP_AUTH_USER']にはNULLが設定されるため、<br> いずれの場合でも、認証ダイアログで[OK]ボタンを押下する場合は、この変数に値が代入されていることになる。<br> <br> したがって、次の位置へ処理が移る。<br> <syntaxhighlight lang="php"> if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Private Page"'); header('HTTP/1.0 401 Unauthorized'); die('このページを見るにはログインが必要です'); } else { // 認証ダイアログでO.K.を押した時はここへ処理が移る } </syntaxhighlight> <br> 次に、ユーザ名とパスワードが正しいかどうかの判別処理が必要となる。<br> 実際の運用では、事前にデータベース等に登録したユーザ名とパスワードを参照して確認することが多い。<br> <br> 以下の例では、固定のユーザ名とパスワードで確認している。<br> <syntaxhighlight lang="php"> if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Private Page"'); header('HTTP/1.0 401 Unauthorized'); die('このページを見るにはログインが必要です'); } else { if($_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $password) { header('WWW-Authenticate: Basic realm="Private Page"'); header('HTTP/1.0 401 Unauthorized'); die('このページを見るにはログインが必要です'); } } </syntaxhighlight> <br> 認証ダイアログにおいて、入力されたユーザ名は<code>$_SERVER['PHP_AUTH_USER']</code>、入力されたパスワードは<code>$_SERVER['PHP_AUTH_PW']</code>で取得できる。<br> 例えば、ユーザ名をadmin、パスワードをpassと入力した場合のみ認証を通す場合は、以下のように記述する。<br> <syntaxhighlight lang="php"> $user = 'admin'; $password = 'pass'; if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Private Page"'); header('HTTP/1.0 401 Unauthorized'); die('このページを見るにはログインが必要です'); } else { if($_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $password) { header('WWW-Authenticate: Basic realm="Private Page"'); header('HTTP/1.0 401 Unauthorized'); die('このページを見るにはログインが必要です'); } } // 認証成功時は、処理はここに移る </syntaxhighlight> <br> 以上が、認証の簡単な流れとなる。<br> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Web]]
PHPの基礎 - ユーザ認証
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse