Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die Benutzerregistrierungs- und Anmeldefunktion in PHP

So implementieren Sie die Benutzerregistrierungs- und Anmeldefunktion in PHP

墨辰丷
墨辰丷Original
2018-05-31 17:33:373699Durchsuche

Dieser Kurs verwendet PHP und Web-Frontend-Technologie, um eine Website-Registrierungs- und Anmeldeseite zu implementieren, PHP-Programmierung zu lernen und zu üben usw. Interessierte Studenten können sich darauf beziehen.

In diesem Artikel wird die auf PHP basierende Benutzerregistrierungs- und Anmeldefunktion vorgestellt. Dieses Projekt ist in vier Teile unterteilt: 1. Erstellung der Front-End-Seite, 2. Erstellung des Bestätigungscodes, 3. Registrierung und Anmeldung, 4. Funktional Verbesserung. Einzelheiten finden Sie weiter unten.

Verifizierungscode-Erstellung

1. Einführung in das Experiment

Dieses Experiment führt Sie dazu, objektorientiertes Denken zu verwenden, um einen Verifizierungscode zu kapseln Art. Und auf der Registrierungs- und Anmeldeoberfläche angezeigt. Durch das Studium dieses Experiments werden Sie die OOP-Ideen von PHP sowie die Verwendung der GD-Bibliothek und die Generierung von Verifizierungscode verstehen.

1.1 Beteiligte Wissenspunkte

  • PHP

  • GD-Bibliothek

  • OOP-Programmierung

1.2 Entwicklungstools

sublime, ein praktischer und schneller Texteditor. Klicken Sie auf die untere linke Ecke des Desktops: Anwendungsmenü/Entwicklung/sublime

2. Kapselungsüberprüfungscodeklasse

2.1 Verzeichnisse erstellen und Schriftarten vorbereiten

Erstellen Sie unter dem Webverzeichnis ein Admin-Verzeichnis als unser Backend-Verzeichnis, um Backend-Codedateien zu speichern. Erstellen Sie unter „Admin“ ein Schriftartenverzeichnis, um die Schriftarten zu speichern, die für die Erstellung von Bestätigungscodes erforderlich sind.

Erstellen Sie unter Admin eine neue Captcha.php-Datei. Dies ist die Bestätigungscodedatei, die wir bearbeiten müssen.

Aktuelle Verzeichnishierarchie:

Captcha.php-Datei bearbeiten:

<?php 
/**
* Captcha class
*/
class Captcha
{
  
  function __construct()
  {
    # code...
  }
}

Fügen Sie die privaten Eigenschaften und Konstruktionsmethoden dieser Klasse hinzu:

<?php 
/**
* Captcha class
*/
class Captcha
{
  private $codeNum;  //验证码位数
  private $width;  //验证码图片宽度
  private $height;  //验证码图片高度
  private $img;  //图像资源句柄
  private $lineFlag;  //是否生成干扰线条
  private $piexFlag;  //是否生成干扰点
  private $fontSize;  //字体大小
  private $code;  //验证码字符
  private $string;  //生成验证码的字符集
  private $font;  //字体
  function __construct($codeNum = 4,$height = 50,$width = 150,$fontSize = 20,$lineFlag = true,$piexFlag = true)
  {
    $this->string = &#39;qwertyupmkjnhbgvfcdsxa123456789&#39;;  //去除一些相近的字符
    $this->codeNum = $codeNum;
    $this->height = $height;
    $this->width = $width;
    $this->lineFlag = $lineFlag;
    $this->piexFlag = $piexFlag;
    $this->font = dirname(__FILE__).&#39;/fonts/consola.ttf&#39;;
    $this->fontSize = $fontSize;
  }
}

Schriftdateien können mit dem folgenden Befehl in das Schriftartenverzeichnis heruntergeladen werden:

$ wget http://labfile.oss.aliyuncs.com/courses/587/consola.ttf

Als nächstes beginnen Sie mit dem Schreiben der spezifischen Methode:

Bildressourcen erstellen Handle

//创建图像资源  
public function createImage(){
    $this->img = imagecreate($this->width, $this->height);  //创建图像资源
    imagecolorallocate($this->img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));  //填充图像背景(使用浅色)
  }

Verwendete verwandte Funktionen

  • imagecreate: Erstellen Sie ein neues palettenbasiertes Bild

  • imagecolorallocate: Einem Bild eine Farbe zuweisen

  • mt_rand: Bessere Zufallszahlen generieren

Erstellen Sie die Bestätigungscodezeichenfolge und geben Sie sie im Bild aus

//创建验证码  
public function createCode(){
    $strlen = strlen($this->string)-1;
    for ($i=0; $i < $this->codeNum; $i++) { 
      $this->code .= $this->string[mt_rand(0,$strlen)];  //从字符集中随机取出四个字符拼接
    }
     $_SESSION[&#39;code&#39;] = $this->code;  //加入 session 中
  
   //计算每个字符间距
    $diff = $this->width/$this->codeNum;
    for ($i=0; $i < $this->codeNum; $i++) { 
          //为每个字符生成颜色(使用深色)
     $txtColor = imagecolorallocate($this->img,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
     //写入图像
      imagettftext($this->img, $this->fontSize, mt_rand(-30,30), $diff*$i+mt_rand(3,8), mt_rand(20,$this->height-10), $txtColor, $this->font, $this->code[$i]);
    }
  }

Verwandte verwendete Funktionen

  • imagecreate: Erstellen Sie ein neues palettenbasiertes Bild

  • imagecolorallocate: Weisen Sie einem Bild eine Farbe zu

  • mt_rand: Generieren Sie bessere Zufallszahlen

Erstellen Sie die Bestätigungscodezeichenfolge und geben Sie sie im Bild aus

//创建验证码  
public function createCode(){
    $strlen = strlen($this->string)-1;
    for ($i=0; $i < $this->codeNum; $i++) { 
      $this->code .= $this->string[mt_rand(0,$strlen)];  //从字符集中随机取出四个字符拼接
    }
     $_SESSION[&#39;code&#39;] = $this->code;  //加入 session 中
  
   //计算每个字符间距
    $diff = $this->width/$this->codeNum;
    for ($i=0; $i < $this->codeNum; $i++) { 
          //为每个字符生成颜色(使用深色)
     $txtColor = imagecolorallocate($this->img,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
     //写入图像
      imagettftext($this->img, $this->fontSize, mt_rand(-30,30), $diff*$i+mt_rand(3,8), mt_rand(20,$this->height-10), $txtColor, $this->font, $this->code[$i]);
    }
  }

Verwandte verwendete Funktionen:

  • imagettftext: Text mit TrueType-Schriftarten in ein Bild schreiben

Interferenzlinien erstellen

//创建干扰线条(默认四条)
public function createLines(){
    for ($i=0; $i < 4; $i++) { 
      $color = imagecolorallocate($this->img,mt_rand(0,155),mt_rand(0,155),mt_rand(0,155));  //使用浅色
      imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color); 
    }
  }

Verwandte Funktionen:

  • Bildlinie: Liniensegment zeichnen

Interferenzpunkte erstellen

//创建干扰点 (默认一百个点)
public function createPiex(){
    for ($i=0; $i < 100; $i++) { 
      $color = imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
      imagesetpixel($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
    }
  }

Verwandte Funktionen:

  • imagesetpixel: Ein einzelnes Pixel zeichnen

Externes Ausgabebild:

 public function show()
  {
    $this->createImage();
    $this->createCode();
    if ($this->lineFlag) {  //是否创建干扰线条
      $this->createLines();
    }
    if ($this->piexFlag) {  //是否创建干扰点
      $this->createPiex();
    }
    header(&#39;Content-type:image/png&#39;);  //请求页面的内容是png格式的图像
    imagepng($this->img);  //以png格式输出图像
    imagedestroy($this->img);  //清除图像资源,释放内存
  }

Verwandte Funktionen:

  • imagepng: PNG-Format Geben Sie das Bild im Browser oder in einer Datei aus

  • imagedestroy: Zerstöre ein Bild

Geben Sie einen externen Bestätigungscode an:

public function getCode(){
    return $this->code;
  }
完整代码如下:
<?php 
/**
* Captcha class
*/
class Captcha
{
  private $codeNum;
  private $width;
  private $height;
  private $img;
  private $lineFlag;
  private $piexFlag;
  private $fontSize;
  private $code;
  private $string;
  private $font;
  function __construct($codeNum = 4,$height = 50,$width = 150,$fontSize = 20,$lineFlag = true,$piexFlag = true)
  {
    $this->string = &#39;qwertyupmkjnhbgvfcdsxa123456789&#39;;
    $this->codeNum = $codeNum;
    $this->height = $height;
    $this->width = $width;
    $this->lineFlag = $lineFlag;
    $this->piexFlag = $piexFlag;
    $this->font = dirname(__FILE__).&#39;/fonts/consola.ttf&#39;;
    $this->fontSize = $fontSize;
  }

  public function createImage(){
    $this->img = imagecreate($this->width, $this->height);
    imagecolorallocate($this->img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
  }

  public function createCode(){
    $strlen = strlen($this->string)-1;
    for ($i=0; $i < $this->codeNum; $i++) { 
      $this->code .= $this->string[mt_rand(0,$strlen)];
    }
    $_SESSION[&#39;code&#39;] = $this->code;
    $diff = $this->width/$this->codeNum;
    for ($i=0; $i < $this->codeNum; $i++) { 
      $txtColor = imagecolorallocate($this->img,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
      imagettftext($this->img, $this->fontSize, mt_rand(-30,30), $diff*$i+mt_rand(3,8), mt_rand(20,$this->height-10), $txtColor, $this->font, $this->code[$i]);
    }
  }

  public function createLines(){
    for ($i=0; $i < 4; $i++) { 
      $color = imagecolorallocate($this->img,mt_rand(0,155),mt_rand(0,155),mt_rand(0,155));
      imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color); 
    }
  }

  public function createPiexs(){
    for ($i=0; $i < 100; $i++) { 
      $color = imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
      imagesetpixel($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
    }
  }

  public function show()
  {
    $this->createImage();
    $this->createCode();
    if ($this->lineFlag) {
      $this->createLines();
    }
    if ($this->piexFlag) {
      $this->createPiexs();
    }
    header(&#39;Content-type:image/png&#39;);
    imagepng($this->img);
    imagedestroy($this->img);
  }

  public function getCode(){
    return $this->code;
  }
}

Das Obige ist der gesamte Code der Verifizierungscodeklasse. Es scheint recht einfach zu sein, aber es nutzt viele Bildverarbeitungsfunktionen. Ich habe auch die notwendigen Links und Nutzungsanweisungen für die oben genannten verwandten Funktionen erstellt. Es besteht keine Notwendigkeit, sich diese Funktionen auswendig zu lernen. Wenn Sie auf etwas Unklares stoßen, lesen Sie bitte jederzeit die offizielle PHP-Dokumentation. Das Wichtigste ist, dass es eine chinesische Dokumentation gibt.

2.2 Verwendung des Bestätigungscodes

Nachdem es verpackt wurde, können Sie mit der Verwendung beginnen. Der Einfachheit halber rufen Sie diese Klasse hier direkt unter der Captcha-Klasse auf:

session_start(); //开启session
$captcha = new Captcha();  //实例化验证码类(可自定义参数)
$captcha->show();  //调用输出

3. Front-End-Anzeige

Der Bestätigungscode wurde am Ende vorbereitet und die Front-End-Schnittstelle kann den Bestätigungscode-Teil des Registrierungs- und Anmeldeformulars in index.php anzeigen:

<p class="form-group">
 <p class="col-sm-12">
   <img src="admin/Captcha.php" alt="" id="codeimg" onclick="javascript:this.src = &#39;admin/Captcha.php?&#39;+Math.random();">
   <span>Click to Switch</span>
 </p>
</p>

Das img-Tag fügt den js-Code des Klickereignisses hinzu, sodass die Funktion des Klickens zum Ändern des Bestätigungscodes realisiert werden kann!

Rendering:


4. Verbesserung

Bisher ist unser Bestätigungscode Das Modul grundsätzlich vollständig. Nach dem Studium hier sollte jeder ein besseres Verständnis für objektorientierte Programmierung haben. Ich bemerkte auch einen Hauch von OOP-Denken. Die drei Hauptmerkmale von OOP: Kapselung, Vererbung und Polymorphismus. Wir verwenden hier nur einen kleinen Teil des Gedankens der Kapselung. Sie können diese Verifizierungscodeklasse weiter verfeinern und verbessern und eine perfektere Klasse entwerfen. Dieses Experiment zeigt uns auch, dass PHP viele Funktionen hat, also merken Sie sich diese nicht auswendig und lesen Sie mehr offizielle Dokumente.

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Verwandte Empfehlungen:

PHP verwendet Curl, um simulierte Anmelde- und Datenerfassungsfunktionsbeispiele zu implementieren

phpVerwenden Sie Cookies, um die Funktion zum Speichern von Benutzernamen und Passwörtern auf Webseiten zu realisieren

phpDie Lösung für das Problem verstümmelter Zeichen nach dem Testen mit Apache

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Benutzerregistrierungs- und Anmeldefunktion in PHP. 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