>  기사  >  PHP 프레임워크  >  thinkphp3.2.3 인증코드가 표시되지 않으면 어떻게 해야 하나요?

thinkphp3.2.3 인증코드가 표시되지 않으면 어떻게 해야 하나요?

PHPz
PHPz원래의
2023-04-21 10:06:55816검색

PHP 개발자로서 우리는 ThinkPHP 프레임워크를 자주 사용하는데, 인증 코드는 웹사이트 보안 보호에 중요한 수준입니다. 그러나 ThinkPHP3.2.3 프레임워크를 사용할 때 가끔 인증 코드가 표시되지 않는 문제가 발생합니다. 우리는 매우 혼란스럽습니다. 그렇다면 어떻게 해결해야 할까요?

먼저 인증코드 생성 과정을 살펴보겠습니다. ThinkPHP에서는 이미지 생성을 통해 인증코드가 구현되며, ThinkPHP는 기본적으로 GD 라이브러리를 사용하여 이미지를 생성합니다. 쉽게 말하면 간섭선, 간섭점, 임의의 문자가 포함된 이미지를 생성하여 인증코드를 생성하는 것입니다. 그러다가 인증코드가 표시되지 않는다면 이미지 생성에 실패한 경우가 많습니다.

이 문제를 해결하려면 다음 단계에 따라 인증 코드가 표시되지 않는 문제를 해결할 수 있습니다.

1단계: 세션이 열려 있는지 확인

먼저 세션이 열려 있는지 확인해야 합니다. 인증코드 생성을 위해서는 세션을 이용하여 인증코드 값을 저장해야 하므로, 세션이 활성화되어 있지 않으면 정상적으로 인증코드가 생성되지 않습니다.

config.php에서 세션의 열려 있는 상태를 확인하세요. config.php 파일을 열고 반환 배열에 다음 코드를 추가하세요.

'session_auto_start' => true,

이 코드를 사용하면 프로그램이 시작될 때 자동으로 세션을 열 수 있습니다. 이미 열려 있으면 정상적인 사용에 영향을 미치지 않습니다.

2단계: GD 라이브러리 사용 가능 여부 확인

두 번째로 ThinkPHP는 인증 코드 생성에 GD 라이브러리를 기본으로 사용하기 때문에 GD 라이브러리가 설치되어 있는지 확인해야 합니다. GD 라이브러리가 설치되어 있지 않거나 사용이 불가능한 경우 정상적으로 인증코드가 생성되지 않습니다.

GD 라이브러리가 설치되어 있는지 확인하려면 php.ini 파일에서 gd2 모듈의 압축이 풀렸는지 확인하고 세 모듈 모두 Extension=php_gd2.dll;extension=php_mbstring.dll;extension=php_exif.dll의 주석이 해제되었는지 확인하면 됩니다. .

php.ini 파일에서 다음 두 줄의 구성을 찾으세요.

extension=php_gd2.dll;
extension=php_mbstring.dll;

앞에 세미콜론이 없으면 GD 라이브러리가 올바르게 설치되었음을 의미합니다.

3단계: 인증코드 생성 디렉터리에 쓰기 가능한지 확인

인증코드가 생성되면 생성된 이미지를 서버에 저장해야 하므로, 인증코드 생성 디렉터리에 쓰기 가능한지 여부도 확인해야 합니다. 생성 디렉터리에 권한이 없거나 존재하지 않는 경우에는 인증코드가 정상적으로 생성되지 않습니다.

다음 코드를 config.php 파일에 추가하여 인증 코드 생성 디렉터리를 구성할 수 있습니다:

'captcha'  =>array(
        'fontSize' => 30,         //验证码字体大小
        'length'   => 4,          //验证码位数
        'useCurve' => false,      //是否画混淆曲线
        'useNoise' => false,      //是否添加杂点
        'fontttf'  => '5.ttf',    //验证码字体,不设置随机获取
        'bg'       => array(243, 251, 254), //背景颜色
        'reset'    => true        //验证成功后是否重置
    ),

이 배열에서는 인증 코드의 길이, 혼동 곡선 그리기 여부, 노이즈 추가 여부를 사용자 정의할 수 있습니다. 포인트, 글꼴 파일 경로 등 또한 확인 코드 생성 디렉터리의 이름을 사용자 정의할 수 있으며 이 디렉터리는 쓰기 가능해야 합니다.

예를 들어 인증 코드 생성 디렉터리가 Application/Runtime/Cache/ 디렉터리로 설정된 경우 디렉터리에 쓰기가 가능한지 확인해야 합니다. 그렇지 않으면 인증 코드가 표시되지 않습니다.

4단계: 인증 코드를 URL 모드로 변경해 보세요.

위 단계에서 문제가 발견되지 않으면 ThinkPHP에서 제공하는 Url 모드를 사용하여 인증 코드를 생성해 보세요. 이 모드는 동적 인증 코드를 생성하고 로봇 공격과 무차별 대입 크래킹을 더 잘 방지할 수 있는 HTML5 캔버스 태그를 사용합니다.

다음 코드를 config.php 파일에 추가하여 인증 코드 생성을 위한 URL 패턴을 설정할 수 있습니다.

'captcha'    => true,

이렇게 하면 아래와 같이 기본 URL 주소가 생성됩니다.

<img src="__APP__/Public/verify/" onclick="this.src=&#39;__APP__/Public/verify/&#39;+Math.random()">

여기에 있는 __APP__은 시스템에서 제공됩니다. 변수는 현재 애플리케이션의 루트 디렉터리를 나타내며 verify는 확인 코드를 생성하는 컨트롤러 메서드의 이름입니다.

이 방법을 사용하면 브라우저 캐시 문제가 발생하여 페이지가 커질 수 있습니다. 따라서 이 문제를 해결하기 위해 확인 코드를 생성하는 동안 틈새 JavaScript 코드를 사용하여 브라우저 캐시를 지울 수도 있습니다.

HTML 페이지에서는 다음과 같이 작성할 수 있습니다.

<img src="__APP__/Public/verify/" onclick="this.src=&#39;__APP__/Public/verify/&#39;+Math.random()">

JavaScript에서는 다음과 같이 작성할 수 있습니다.

$(function(){
    $('#verify_img').click(function(){
        var timenow = new Date().getTime();
        $(this).attr('src','/Home/Public/verify/' + timenow);
    });
});

이 JavaScript 코드는 인증 코드 이미지를 클릭할 때마다 타임스탬프를 동적으로 생성하여 이를 URL은 인증 코드에 액세스할 때마다 새로운 URL 주소가 되도록 보장하여 브라우저 캐싱 문제를 효과적으로 방지합니다.

요약

위의 일반적인 해결 방법을 통해 ThinkPHP3.2.3 인증 코드가 표시되지 않는 문제를 효과적으로 해결할 수 있습니다. 실제 개발 프로젝트에서도 프로그램의 정상적인 작동을 보장하고 사용자 개인정보 및 데이터 보안을 더욱 잘 보호하기 위해 이러한 사양을 따라야 합니다. 동시에 우리는 항상 보안 문제에 주의를 기울여야 하며, 웹 사이트 공격을 방지하고 웹 사이트 보안을 보호하기 위해 새로운 기술을 계속 배우고 탐색해야 합니다.

위 내용은 thinkphp3.2.3 인증코드가 표시되지 않으면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.