画像認証

画像認証組込ファイル概要

Pear::Text_CAPTCHAを組込んだPear画像認証組込ファイルの内容について説明していきます。
まずはフロ-チャ-トを見てください。

フロ-チャ-ト

フロ-からわかるように画像認証組込ファイルは3つのファイルからなっています。


認証画像作成ファイル img_auth_st.php

認証画像を作成し、imgフォルダにその画像を保存します。

全体ファイル  img_auth_22.php

img_auth_st.phpで作成された認証画像を表示後、画像の文字列入力画面を表示します。

アクションファイル  action-2.php

画像文字と入力文字が一致するか判定します。
一致したら該当サイトを表示します。

認証画像作成ファイル

認証画像作成ファイル img_auth_st.php を作成します。
まず最初に、63Pear Villageに戻り、左サイドナビ「画像認証の基本」の中の
「画像認証基本ファイル作成」 を見てください。
基本的にはこの内容とほぼ同じファイルを作成します。
63Pear Villageに戻り、左サイドナビ「画像認証の組込」の中の
「認証画像作成PHPファイル」 を見てください。
これは、63Pear Village、左サイドナビ「画像認証の基本」の中の
「画像認証基本 Pear(php)ファイル」 とほとんど同じです。
違いは、文字入力が完了したときアクションファイル action-2.php に遷移する必要があるため、最初に
session_start();
を設置しこれにより、画像に表示させた文字列 $phrase を
$_SESSION['phrase'] = $phrase;
としアクションファイルに渡します。
後は、「画像認証基本 Pearファイル」と同じです。
これでイメ-ジフォルダ img に認証用画像 auth_img.png が作成されます。
この画像は、img_auth_st.php を実行するたびに変わります。

画像認証組込入力ファイル

全体ファイル img_auth_22.php を作成します。
63Pear Villageに戻り、左サイドナビ「画像認証の組込」の中の
「画像認証組込入力PHPファイル」 を見てください。
include "php/img_auth_st.php";
で認証画像を準備します。
そのあと入力フォ-ムを作成しています。
<input type="text" name="check" size=10 autofocus>
で autofocus 属性がでてきますが、これは HTML5 から使えるようになった属性で、 これによりこの入力欄にカ-ソルを置くことができます。
これまでは JavaScript で設定していましたがその必要がなくなりました。

認証画像表示

HTMLのなかで、認証画像を表示させようとするとキャッシュが邪魔をしてなかなかうまく行きません。
PHPファイルであれば、
echo"<img src='img/auth_img.png'>";
で OK ですが、HTMLファイルのなかで、
<img src="img/auth_img.png">
とすると、
プラウザのキャッシュが効いて最初はよいのですが再度認証をしようとすると認証画像が元のままで変わってくれません。
そこで、
<img src=" <?php echo 'img/auth_img.png?'.time() ?>">
の様な書き方をします。
<img src="img/auth_img.png?123">
のように ?123 と書きこの数字を変化していくと、img/auth_img.png に番号が着いているので この番号に該当する画像をブラウザは探しに行ってくれます。
よって、この数字を変化していけば、キャッシュの落とし穴に落ちないですみます。
time()はPHP関数で、現在時刻を Unix エポック (1970 年 1月 1日 00:00:00 GMT) からの通算秒 として返してくれます。
故に、ブラウザは最新の認証画像を表示することになります。

デバッグのために認証文字列表示

デバッグのために
<?php echo $_SESSION['phrase']; ?>
を追加しておきます。
これで、画像の中の文字列と、認証文字列が一致しているかすぐわかります。
デバッグ完了後は削除しましょう。

アクションファイル

アクションファイル action-2.php を作成します。
ここで、画像文字と入力文字が一致するか判定します。
一致したら該当サイトを表示します。
63Pear Villageに戻り、左サイドナビ「画像認証の組込」の中の
「組込アクション PHP ファイル」 を見てください。
session を start させます。
このファイルを直接アクセスされた時の処理として
if(empty($_SESSION)){
 header(
 "Location: ../img_auth_22.php"
 );
}
を実行します。
これにより直接アクセスされた時は強制的に、画像認証組込入力ファイルに追い返します。
この処理がないと直接アクセスされた時にエラ-を発生させながら次の処理に進んでいきます。
次に、if 文
if($_SESSION['phrase'] != $_POST['check'])
で、認証画像文字と入力文字が同じか判定しています。
判定NGなら
header("Location: ../img_auth_22.php");
でジャンプさせ、再認証するようにしています。
また、判定OKなら
if 文の次に、html 文を書いて本文を表示しています。


画像認証組込動作確認 に進む
画像認証基本ファイル動作確認 に戻る

63Pear Village に戻る