Thinkphp は、MVC モデルに基づいたオープンソースの Web アプリケーション フレームワークであり、多くの優れた機能を提供し、開発者が Web アプリケーションをより効率的に開発できるようにします。その一つがキャプチャ機能です。検証コード (正式名は「グラフィカル検証コード」) は、悪意のあるロボットの登録やログインを防ぐために使用される技術的手段です。通常、ユーザーが間違った確認コードを入力すると、Web サイトは確認コードのイメージを更新または再生成します。ただし、一部のユーザーは、Thinkphp 検証コード エラーが更新されないという問題に遭遇しました。
1. 問題の説明
Thinkphp では、検証コードの生成と検証に Thinkphp 独自の検証コード ライブラリが使用されます。このクラス ライブラリを使用すると、検証コードが間違って入力された場合、Web サイトで検証コードがすぐに更新されないことがわかります。ユーザーが間違った認証コードを複数回連続して入力した場合、Web サイトは認証コードを更新しないため、ユーザーは非常に不便を感じます。
2. 問題分析
この問題の原因は、Thinkphp の検証コード ライブラリに $reset 属性が false に設定されたメソッドがあることです。この属性の値が false の場合、検証コードは有効期限が切れるまで更新されません。そのため、ユーザーが間違った確認コードを複数回入力しても、Web サイトは確認コードを更新しません。
3. 解決策
この問題の解決策も非常に簡単で、$reset 属性値を true に変更するだけです。修正方法は次のとおりです:
ThinkPHP/Library/Think/Verify.class.php で次のコードを見つけます:
//是否画混淆曲线 public $useCurve = true; //是否添加杂点 public $useNoise = true; //验证码图片宽度 public $imageW = 130; //验证码图片高度 public $imageH = 50; //验证码位数 public $length = 4; //验证码字体大小(px) public $fontSize = 25; //是否画颜色背景 public $useZh = false; //验证码种子 protected $seed = '123456789QWERTYUIOPASDFGHJKLZXCVBNM'; //生成验证码 public function entry(){ //验证码字符 $this->code = $this->makeCode(); session($this->seKey,$this->code);//验证码保存到SESSION中 $width = ($this->length* $this->fontSize*0.9 + $this->fontSize*1.5); $height = $this->fontSize*2; if( $this->useZh ){ $width = 230; $height = 50; } //创建图像 $this->image = imagecreate($width,$height); //设置背景 if($this->useZh) imagecolorallocate($this->image,244, 220, 215); else{ $this->bkcolor = imagecolorallocate($this->image, 255, 255, 255); imagefill($this->image,0,0,$this->bkcolor); } //混淆曲线 if ($this->useCurve) { $this->writeCurve(); } //杂点 if ($this->useNoise) { $this->writeNoise(); } //验证码 $this->writeCode(); header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate"); header("Content-type: image/png;charset=utf8"); imagepng($this->image); imagedestroy($this->image); }
$reset 属性の値を true に変更します。次のように:
//是否画混淆曲线 public $useCurve = true; //是否添加杂点 public $useNoise = true; //验证码图片宽度 public $imageW = 130; //验证码图片高度 public $imageH = 50; //验证码位数 public $length = 4; //验证码字体大小(px) public $fontSize = 25; //是否画颜色背景 public $useZh = false; //验证码种子 protected $seed = '123456789QWERTYUIOPASDFGHJKLZXCVBNM'; //生成验证码 public function entry(){ //验证码字符 $this->code = $this->makeCode(); session($this->seKey,$this->code);//验证码保存到SESSION中 $width = ($this->length* $this->fontSize*0.9 + $this->fontSize*1.5); $height = $this->fontSize*2; if( $this->useZh ){ $width = 230; $height = 50; } //创建图像 $this->image = imagecreate($width,$height); //设置背景 if($this->useZh) imagecolorallocate($this->image,244, 220, 215); else{ $this->bkcolor = imagecolorallocate($this->image, 255, 255, 255); imagefill($this->image,0,0,$this->bkcolor); } //混淆曲线 if ($this->useCurve) { $this->writeCurve(); } //杂点 if ($this->useNoise) { $this->writeNoise(); } //验证码 $this->writeCode(); // 以下为代码修改 $this->reset = true; header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate"); header("Content-type: image/png;charset=utf8"); imagepng($this->image); imagedestroy($this->image); }
変更後、保存して再送信します。
4. 結論
この記事では、Thinkphp の検証コード エラーが更新されない問題の原因と解決策を紹介します。この問題は、コードを 1 行変更するだけで解決できます。実際、どのようなフレームワークを使用する場合でも、問題が発生するのは避けられません。しかし、積極的に解決策を探している限り、問題は必ず解決されます。
以上がthinkphp 検証コード エラーが更新されない場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。