PHP 사용자 등록 및 로그...LOGIN

PHP 사용자 등록 및 로그인 시스템을 위한 인증코드 제작

인증코드 분석

로그인 및 등록 페이지에 인증코드를 설정하는 것은 주로 무차별 대입 크래킹, 악성 등록 등을 방지하기 위한 것이며 오늘날 웹사이트의 표준 콘텐츠로 개발되었습니다. 직접 인증번호로 사용자의 휴대폰이나 이메일로 전송하여 인증합니다. 이 섹션에서는 가장 간단한 사진 인증코드만 인증합니다. 이 섹션을 사용하면 인증코드 인증의 원리를 이해할 수 있습니다. 인증 코드 생성을 위한 간단한 흐름도



구체적인 구현은 아래 콘텐츠를 참조하세요

生成验证码的流程图.png

인증 코드 배경 이미지 생성


1. php의 GD 확장을 활성화합니다
php.ini 파일을 열고 확장명=php_gd2.dll의 주석을 해제하고 활성화합니다. 원래 활성화되어 있으면 변경할 필요가 없습니다.

다음으로 60X15 흰색 배경 이미지

2. 리소스 데이터의 일종인 캔버스

p1.png

를 만듭니다. 조작할 수 있는 이미지 리소스입니다.

새 캔버스 만들기(New)

ImageCreate(너비, 높이), 팔레트 기반 캔버스를 만듭니다.
  • imageCreateTrueColor(width, height); 트루 컬러 캔버스를 만듭니다.

  • 이미지를 기반으로 캔버스 만들기(열기)

imageCreateFromJPEG(이미지 주소);
  • imageCreateFromPNG(이미지 주소);

    imageCreateFromGIF(이미지 주소);

    트루 컬러 캔버스를 만듭니다.

$width=60;

$height=15;

//캔버스 만들기

$img=imageCreateTrueColor($width,$height);

$img를 보려면 var_dump()를 사용해 보세요. 출력 리소스 유형과 유사합니까? 3. 캔버스 조작


색상 지정
: 캔버스에 특정 색상을 사용해야 하는 경우 먼저 캔버스에 색상을 지정해야 합니다.

사용 기능:

Color ID = imageColorAllocate(canvas, R, G, B)

//색상 할당 $white = imageColorAllocate($img,0xff,0xff,0xff);

캔버스 채우기

: 채우기 점, 연속 점을 동일한 색상으로 채우기(교체)

기능 사용:

imageFill(캔버스, 채우기 위치 x, 채우기 위치 Y, 색상 식별)을 사용하여 완료

위치는 좌표를 사용하여 관리됩니다.

원점: 0, 0, 캔버스 왼쪽 상단.

오른쪽으로 갈수록 x축이 증가하고, 아래로 갈수록 Y축이 증가합니다.

//캔버스에 색상 채우기
imageFill($img,0,0,$white);

4. 캔버스에 출력

캔버스가 나옵니다.

일반:

  • 이미지 파일로 출력합니다.

  • 직접 출력.

사용 기능:

imagePNG(canvas[, 파일 주소])://지정된 주소에 파일 생성

imageJPEG();//웹 페이지에 직접 출력, 당사 인증 코드는 이 방법을 사용합니다

imageGIF();//이전과 동일

두 번째 매개변수가 없으면 직접 출력을 의미합니다.

브라우저에 직접 출력하려면 응답 데이터 유형이 PNG 형식 이미지여야 함을 브라우저에 알려야 합니다.

Content-type

//직접 출력

header('Content -Type:image /jpeg;');

imageJPEG($img);

참고: 캔버스는 다양한 형식으로 여러 번 출력할 수 있습니다!

5. 캔버스 리소스 삭제

함수 사용: imageDestroy();

imageDestroy($img);



인증 코드 값 생성

1. 먼저 가능한 모든 문자를 정의하고 모든 문자의 총 길이와 생성하려는 인증 코드의 길이를 얻어야 합니다. 코드는 다음과 같습니다.

//인증 코드 값을 생성합니다.

$chars = '1234567890' ;//나타날 수 있는 문자

$chars_len=strlen($chars);

$code_len=4;//인증코드 길이$code='';//초기화 인증 코드 문자열



2 4번, 매번 가능한 모든 문자에서 숫자를 추출하고 마지막으로 네 자리를 연결하여 인증 코드 값을 생성합니다

for($i= 1;$i<=$code_len ;++$i){ $rand=mt_rand(0,$chars_len-1);//0~9 중에서 무작위로 숫자 선택

$code.=$rand;//연결 가져온 번호를 투게더

}


3. 세션을 열고 인증코드 값을 세션에 저장하여 인증

//인증을 위해 세션에 저장------ -- ---------------session_start();

$_SESSION[' ver_code']=$code;



인증코드 배경에 인증코드 값을 넣어주세요 image

1. 인증코드 값에 임의의 색상을 지정합니다

//문자열 색상을 임의로 지정합니다$str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand (0,255)) ;


2. 인증코드 값을 중앙에 두고 배경 이미지에 적어주세요

//문자열의 중심 계산
//문자열 크기
$font=5;
//캔버스 크기
$img_w=imageSX($img);
$img_h=imageSY($img);
//Font
$font_w=imagefontwidth($font);
$font_h=imagefontheight($font);
//문자열의 크기
$code_w=$font_w*$code_len;
$code_h=$font_h;
$x = ($img_w-$code_w)/2;
$y=($img_h-$code_h)/2;
//캔버스에 인증코드 출력--------------- - ------------
imageString($img,$font,$x,$y,$code,$str_color);

3. 인증코드 출력

/ /직접 출력
imageJPEG($img);
imageDestroy($img);


전체 코드는 다음과 같습니다

<?php
//生成验证码背景图---------------------------------
header('Content-Type:image/jpeg;');
//背景图尺寸
$width=60;
$height=15;
//创建画布
$img=imageCreateTrueColor($width,$height);
//分配颜色
$white = imageColorAllocate($img,0xff,0xff,0xff);
//填充颜色到画布
imageFill($img,0,0,$white);
//生成验证码的值----------------------------------
$chars = '1234567890';//所以可能出现的字符
$chars_len=strlen($chars);
$code_len=4;//验证码的长度
$code='';//初始化验证码字符串
for($i=1;$i<=$code_len;++$i){
    $rand=mt_rand(0,$chars_len-1);//随机取0-9中的任意一个数字
    $code.=$rand;//将取出来的数字连接在一起
}
//存入session中,用于验证-------------------------
session_start();
$_SESSION['ver_code']=$code;
//随机分配字符串颜色------------------------------
$str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//计算字符串的居中
//字符串大小
$font=5;
//画布尺寸
$img_w=imageSX($img);
$img_h=imageSY($img);
//字体的尺寸
$font_w=imagefontwidth($font);
$font_h=imagefontheight($font);
//字符串的尺寸
$code_w=$font_w*$code_len;
$code_h=$font_h;
$x=($img_w-$code_w)/2;
$y=($img_h-$code_h)/2;
//把验证码输出到画布上----------------------------
imageString($img,$font,$x,$y,$code,$str_color);
//直接输出
imageJPEG($img);
imageDestroy($img);
?>


다음 섹션
<?php //生成验证码背景图--------------------------------- header('Content-Type:image/jpeg;'); //背景图尺寸 $width=60; $height=15; //创建画布 $img=imageCreateTrueColor($width,$height); //分配颜色 $white = imageColorAllocate($img,0xff,0xff,0xff); //填充颜色到画布 imageFill($img,0,0,$white); //生成验证码的值---------------------------------- $chars = '1234567890';//所以可能出现的字符 $chars_len=strlen($chars); $code_len=4;//验证码的长度 $code='';//初始化验证码字符串 for($i=1;$i<=$code_len;++$i){ $rand=mt_rand(0,$chars_len-1);//随机取0-9中的任意一个数字 $code.=$rand;//将取出来的数字连接在一起 } //存入session中,用于验证------------------------- session_start(); $_SESSION['ver_code']=$code; //随机分配字符串颜色------------------------------ $str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //计算字符串的居中 //字符串大小 $font=5; //画布尺寸 $img_w=imageSX($img); $img_h=imageSY($img); //字体的尺寸 $font_w=imagefontwidth($font); $font_h=imagefontheight($font); //字符串的尺寸 $code_w=$font_w*$code_len; $code_h=$font_h; $x=($img_w-$code_w)/2; $y=($img_h-$code_h)/2; //把验证码输出到画布上---------------------------- imageString($img,$font,$x,$y,$code,$str_color); //直接输出 imageJPEG($img); imageDestroy($img); ?>
코스웨어