ホームページ > バックエンド開発 > PHPの問題 > PHPでログイン認証コードを実装する方法

PHPでログイン認証コードを実装する方法

藏色散人
リリース: 2023-03-06 06:30:01
オリジナル
4329 人が閲覧しました

ログイン確認コードを実装する

php メソッド: 最初に 4 ~ 6 桁のランダムな確認コードを生成し、次に生成された各文字をセッションまたはデータベースに保存し、次に確認コードをユーザーの携帯電話に送信し、最後に入力した確認コードと比較して確認します。

PHPでログイン認証コードを実装する方法

推奨: 「PHP ビデオ チュートリアル

PHP は、単純な検証コード関数メカニズムを実装しています

Web サイトのセキュリティは、開発者にとって無視できない問題です。現在、Web サイトのセキュリティを向上させるために最も一般的に使用されている方法の 1 つは、確認コード機能メカニズムを使用することです。いくつかの方法では、混乱を招くために数桁の数字と文字しか使用されていません。認証コードには、携帯電話を使用してテキストメッセージを送信して認証するものや、メールアドレスを使用して認証するものがありますが、この認証コード機能の仕組みはどのように実装されているのでしょうか。以下に検証コード機能の仕組みの実装思想と簡単な実装方法を詳しく説明します。

1. 検証コード機能の仕組み実装のアイデア

① 従来の検証コード実装:

a. png画像の生成

b. 設定画像の背景色

c、フォントの色とスタイルを設定

d、4桁のランダムな確認コード

eを生成し、生成された各文字を調整および回転しますPNG 画像上に角度と位置を描画します。

#f、ノイズと干渉線を追加して、登録マシンが元の画像を解析して悪意のある登録が行われないようにします

#g、画像を出力します

h、画像を解放します 占有メモリ

i. 確認コードをセッションまたはデータベースに保存します

j. 入力した確認コードと比較します

② SMS (電子メール) 検証コードのメカニズム :

a. 4 ~ 6 桁のランダムな検証コードを生成します

b. 生成された各文字をセッションまたはデータベースに保存します

c. 検証コードはユーザーの携帯電話 (メール)

d に送信され、ユーザーは指定された時間内にコードを入力します (

#e)。認証コードはセッションまたはデータベースから取り出されます

f, 入力した認証コードと比較検証する

#2. 認証コード機能を実装する簡単な仕組み

① 新しい captcha.php を作成し、以下のコードを記述します

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0020
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
 
//开启session
session_start();
//创建一个大小为 100*30 的验证码
$image = imagecreatetruecolor(100, 30);
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
 
$captch_code = &#39;&#39;;
for ($i = 0; $i < 4; $i++) {
    $fontsize = 6;
    $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
    $data = &#39;abcdefghijkmnpqrstuvwxy3456789&#39;;
    $fontcontent = substr($data, rand(0, strlen($data) - 1), 1);
    $captch_code .= $fontcontent;
    $x = ($i * 100 / 4) + rand(5, 10);
    $y = rand(5, 10);
    imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
//就生成的验证码保存到session
$_SESSION[&#39;authcode&#39;] = $captch_code;
 
//在图片上增加点干扰元素
for ($i = 0; $i < 200; $i++) {
    $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
    imagesetpixel($image, rand(1, 99), rand(1, 29), $pointcolor);
}
 
//在图片上增加线干扰元素
for ($i = 0; $i < 3; $i++) {
    $linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
    imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1, 29), $linecolor);
}
//设置头
header(&#39;content-type:image/png&#39;);
imagepng($image);
imagedestroy($image);
 
?>
ログイン後にコピー

② 新しいフォーム.phpを作成し、以下のコードを記述します

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0021
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
 
if (isset($_REQUEST[&#39;authcode&#39;])) {
    session_start();
    if (strtolower($_REQUEST[&#39;authcode&#39;]) == $_SESSION[&#39;authcode&#39;]) {
        echo "输入正确!";
    } else {
        echo "输入错误!";
    }
    exit();
}
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <title>确认验证码</title>
</head>
<body>
<form method="post" action="./form.php">
    <p>验证码图片:
        <img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand(); ?>" width=100 height=30>
        <a href="javascript:void(0)"
           onClick="document.getElementById(&#39;captcha_img&#39;).src=&#39;./captcha.php?r=&#39;+Math.random()">换一个?</a>
    </p>
    <p>请输入图片中的内容:<input type="text" name="authcode" value=""/></p>
    <p><input type="submit" value="提交" style="padding:6px 20px;"></p>
</form>
</body>
</html>
ログイン後にコピー

以上がPHP検証コードの制作アイデアと実装方法で、単純なものから複雑なものまで、完璧な検証コードを書くことができますこれらを踏まえた機能メカニズム。

以上がPHPでログイン認証コードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート