Heim  >  Artikel  >  PHP-Framework  >  Was tun, wenn der Thinkphp-Bestätigungscode-Fehler nicht aktualisiert wird?

Was tun, wenn der Thinkphp-Bestätigungscode-Fehler nicht aktualisiert wird?

PHPz
PHPzOriginal
2023-04-17 09:49:16782Durchsuche

Thinkphp ist ein Open-Source-Webanwendungsframework, das auf dem MVC-Modell basiert. Es bietet viele hervorragende Funktionen und Features, die es Entwicklern ermöglichen, Webanwendungen effizienter zu entwickeln. Eine davon ist die Captcha-Funktion. Der Verifizierungscode, die vollständige Bezeichnung für „grafischer Verifizierungscode“, ist ein technisches Mittel, mit dem verhindert werden soll, dass sich böswillige Roboter registrieren oder anmelden. Wenn ein Benutzer einen falschen Bestätigungscode eingibt, aktualisiert oder generiert die Website normalerweise ein Bestätigungscode-Bild neu. Bei einigen Benutzern ist jedoch das Problem aufgetreten, dass der Thinkphp-Bestätigungscode nicht aktualisiert wurde. Was ist los?

1. Problembeschreibung

In Thinkphp nutzt die Generierung und Verifizierung des Verifizierungscodes die eigene Verifizierungscode-Bibliothek von Thinkphp. Bei Verwendung dieser Klassenbibliothek werden Benutzer feststellen, dass die Website den Bestätigungscode nicht sofort aktualisiert, wenn der Bestätigungscode falsch eingegeben wird. Wenn der Benutzer mehrmals hintereinander den falschen Bestätigungscode eingibt, aktualisiert die Website den Bestätigungscode nicht, was zu großen Unannehmlichkeiten für den Benutzer führt.

2. Problemanalyse

Der Grund für dieses Problem ist, dass es in der Verifizierungscode-Bibliothek von Thinkphp eine Methode gibt, bei der das Attribut $reset auf false gesetzt ist. Wenn der Wert dieses Attributs falsch ist, wird der Bestätigungscode erst aktualisiert, wenn er abläuft. Wenn der Benutzer also mehrmals den falschen Bestätigungscode eingibt, aktualisiert die Website den Bestätigungscode nicht.

3. Lösung

Für dieses Problem ist die Lösung ebenfalls sehr einfach: Ändern Sie einfach den Attributwert $reset in true. Die Änderungsmethode lautet wie folgt:

Suchen Sie den folgenden Code in 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);
   }

Ändern Sie den Attributwert $reset auf true. Der geänderte Code lautet wie folgt:

   //是否画混淆曲线
   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);
   }

Nach der Änderung , Einfach speichern und erneut senden.

4. Fazit

Dieser Artikel stellt die Ursachen und Lösungen für das Problem vor, dass der Thinkphp-Bestätigungscode-Fehler nicht aktualisiert wird. Dieses Problem kann durch die Änderung nur einer Codezeile gelöst werden. Tatsächlich sind Probleme bei der Verwendung eines beliebigen Frameworks unvermeidlich. Aber solange wir aktiv nach Lösungen suchen, wird das Problem immer gelöst.

Das obige ist der detaillierte Inhalt vonWas tun, wenn der Thinkphp-Bestätigungscode-Fehler nicht aktualisiert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn