ホームページ >PHPフレームワーク >ThinkPHP >thinkphp3.2.3の検証コードが表示されない場合はどうすればよいですか?

thinkphp3.2.3の検証コードが表示されない場合はどうすればよいですか?

PHPz
PHPzオリジナル
2023-04-21 10:06:55874ブラウズ

PHP 開発者として、私たちは ThinkPHP フレームワークを使用することが多く、検証コードは Web サイトのセキュリティ保護にとって重要なレベルですが、ThinkPHP3.2.3 フレームワークを使用すると、検証コードが表示されないという問題が発生することがあります。このことは私たちを非常に混乱させました。では、どうすれば解決できるでしょうか?

まず、検証コード生成のプロセスを理解しましょう。 ThinkPHP では、検証コードはイメージを作成することによって実装され、ThinkPHP はデフォルトで GD ライブラリを使用してイメージを生成します。簡単に言うと、干渉線、干渉点、ランダムな文字を含む画像を生成することで認証コードを生成します。その後、認証コードが表示されない場合は、イメージの生成に失敗していることが考えられます。

この問題に対応して、確認コードが表示されない問題を解決するには、次の手順を試してください。

ステップ 1: セッションが開いているかどうかを確認する

まず、セッションが開いているかどうかを確認する必要があります。認証コードの生成には認証コードの値を保存するためにセッションを使用する必要があるため、セッションがオンになっていないと認証コードが正常に生成されません。

config.php でセッションの開始ステータスを確認します。config.php ファイルを開き、次のコードを戻り配列に追加します:

'session_auto_start' => true,

このコードにより、プログラムは自動的に開始されます。起動セッションがすでに有効になっている場合、通常の使用には影響しません。

ステップ 2: GD ライブラリが利用可能かどうかを確認する

次に、ThinkPHP は検証コードの生成にデフォルトで GD ライブラリを使用するため、GD ライブラリがインストールされているかどうかを確認する必要があります。 GDライブラリがインストールされていない、または使用できない場合、検証コードが正常に生成されません。

GD ライブラリがインストールされているかどうかを確認するには、php.ini ファイルと 3 つのモジュールすべてで gd2 モジュールが解凍されているかどうかを確認できます。extension=php_gd2.dll;extension=php_mbstring.dll;extension=php_exif .dll が解凍されています。

php.ini ファイルで次の 2 行の設定を見つけます:

extension=php_gd2.dll;
extension=php_mbstring.dll;

セミコロン; がその前にない場合は、GD ライブラリが正しくインストールされていることを意味します。

ステップ 3: 検証コード生成ディレクトリが書き込み可能かどうかを確認する

検証コードを生成すると、生成された画像をサーバーに保存する必要があるため、検証コード生成ディレクトリは書き込み可能です。生成ディレクトリに権限がない場合、または存在しない場合、検証コードは正常に生成されません。

次のコードを config.php ファイルに追加して、検証コード生成ディレクトリを構成できます:

'captcha'  =>array(
        'fontSize' => 30,         //验证码字体大小
        'length'   => 4,          //验证码位数
        'useCurve' => false,      //是否画混淆曲线
        'useNoise' => false,      //是否添加杂点
        'fontttf'  => '5.ttf',    //验证码字体,不设置随机获取
        'bg'       => array(243, 251, 254), //背景颜色
        'reset'    => true        //验证成功后是否重置
    ),

この配列では、検証コードの長さ、描画するかどうかをカスタマイズできます。混同曲線、ノイズを加えるかどうか、フォントファイルのパスなど。また、検証コード生成ディレクトリの名前をカスタマイズすることもできます。このディレクトリは書き込み可能でなければなりません。

たとえば、検証コード生成ディレクトリが Application/Runtime/Cache/ ディレクトリに設定されている場合、そのディレクトリが書き込み可能であることを確認する必要があります。そうしないと、検証コードは表示されません。

ステップ 4: 検証コードを URL モードに変更してみる

上記のステップで問題が見つからない場合は、ThinkPHP が提供する URL モードを使用して検証コードを生成してみることができます。コード。このモードでは、HTML5 キャンバス タグを使用します。これにより、動的な検証コードが生成され、ロボット攻撃やブルート フォース クラッキングをより適切に防ぐことができます。

次のコードを config.php ファイルに追加して、検証コードを生成するための URL パターンを設定できます:

'captcha'    => true,

これにより、以下に示すデフォルトの URL アドレスが生成されます:

<img src="__APP__/Public/verify/" onclick="this.src=&#39;__APP__/Public/verify/&#39;+Math.random()">

ここでの __APP__ はシステムによって提供される変数で、現在のアプリケーションのルート ディレクトリを示します。verify は検証コードを生成するコントローラー メソッドの名前です。

この方法では、ブラウザのキャッシュの問題が発生し、ページが肥大化する可能性があります。したがって、ニッチな JavaScript コードを使用して、検証コードを生成する際にブラウザーのキャッシュをクリアして、この問題を解決することもできます。

HTML ページでは、次のように記述できます:

<img src="__APP__/Public/verify/" onclick="this.src=&#39;__APP__/Public/verify/&#39;+Math.random()">

JavaScript では、次のように記述できます:

$(function(){
    $('#verify_img').click(function(){
        var timenow = new Date().getTime();
        $(this).attr('src','/Home/Public/verify/' + timenow);
    });
});

この JavaScript コードは、アクセスするたびに検証コードを生成します。クリック 画像を表示すると、タイムスタンプが動的に生成されて URL の一部となり、検証コードにアクセスするたびに新しい URL アドレスが使用されるようになり、ブラウザのキャッシュの問題が効果的に回避されます。

概要

上記の一般的な解決策を通じて、ThinkPHP3.2.3 検証コードが表示されない問題を効果的に解決できます。実際の開発プロジェクトでは、プログラムの正常な動作を確保し、ユーザーのプライバシーとデータのセキュリティをより適切に保護するために、これらの仕様に従う必要もあります。同時に、セキュリティ問題に常に注意を払い、Web サイトへの攻撃を防ぎ、Web サイトのセキュリティを保護するための新しいテクノロジーの学習と探索を継続する必要があります。

以上がthinkphp3.2.3の検証コードが表示されない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。