Zend 기반 Captcha 메커니즘 의 응용
환경 설 치 는 우선 Zend 의 Captcha 에 GD 를 설치 해 야 합 니 다.GD 가 설치 되 어 있 는 지 확인 하려 면 phpinfo()에서 GD 모듈 이 있 는 지 확인 해 야 합 니 다.(php-m 에 있 는 모듈 에 gd 가 있 을 수 있 지만 phpInfo()에 있 는 모듈 에 gd 가 없습니다.이 문 제 는 PHP 와 Apache 가 설치 되 어 있 지 않다 는 것 입 니 다.구 글
(gd 를 설치 하 는 과정 에서 Missing Dependency:libt 1.so.5 모듈 오 류 를 알 리 면 이 글 을 보십시오.http://www.siutung.org/post/730/)
인증번호 이미지 생 성 Zend 사용Captcha_Image 클래스
$captcha = new Zend_Captcha_Image();
$captcha->setWordLen('4')
->setHeight('60')
->setFont(NCHANNEL_FONT_DIR . '/arial.ttf')
->setImgDir(NCHANNEL_CAPTCHA_DIR)
->setDotNoiseLevel('5')
->setLineNoiseLevel('5');
$id = $captcha->generate();
$code = $captcha->getWord();
1 여기에 두 개의 변수 가 있 습 니 다.$id 와$code 입 니 다.그림 파일 이름 이$id 입 니 다.".png";이 id 는 난수 입 니 다.
$code 는 이 그림 의 문자 입 니 다.인증 코드 의 답 입 니 다.
2 setWordLen 등 설 치 된 인 터 페 이 스 는 ZendCaptcha_Image 가 외부 에 노출 된 인증 코드 그림 설정사실 함수 명 을 보면 무엇 을 하 는 지 알 수 있 습 니 다.구체 적 으로 젠 드 의 에이 피 매 뉴 얼 을 참고 하 세 요.
3 font 글꼴 파일 은 서버 에 있어 야 합 니 다.ImgDir 는 그림 생 성 경 로 를 설정 합 니 다.
인증 코드 그림 이 되 었 습 니 다.인증 코드 그림 이 생 성 되 었 습 니 다.이제 인증 코드 를 검증 해 야 합 니 다.
검증 절 차 는 ZendSession_Namespace 이 session 저장 모듈.
우선,인증 코드 를 생 성 할 때 id 와 code 두 변수 가 저장 되 어야 합 니 다.좋 습 니 다.이전 단계 로 돌아 가 코드 를 수정 하 겠 습 니 다
$captcha = new Zend_Captcha_Image();
$captcha->setWordLen('4')
->setHeight('60')
->setFont(NCHANNEL_FONT_DIR . '/arial.ttf')
->setImgDir(NCHANNEL_CAPTCHA_DIR)
->setDotNoiseLevel('5')
->setLineNoiseLevel('5');
$id = $captcha->generate();
$codeSession = new Zend_Session_Namespace('captcha_code_' . $id);
$codeSession->code = $captcha->getWord();
.여기 서 보 았 습 니 다.$captcha 를 사용 합 니 다.code_$id 는 code 를 저장 합 니 다.검증 절 차 를 기 다 렸 을 때 사용 하 는 것 이 목적 이다.두 번 째 단 계 는 페이지 에 폼 을 전달 할 때$id 와 인증 코드 그림 을 전달 합 니 다.
사용자 에 게 인증 번 호 를 기입 하 게 하 다.
세 번 째 단계,검증.이 단 계 를 검증 하려 면 사용자 가 두 개의 인 자 를 제공 해 야 합 니 다:$id 와 인증 코드 의 답$code
$codeSession = new Zend_Session_Namespace('captcha_code_' . $this->_params['id']);
if ($codeSession == null || strtolower($codeSession->code) != strtolower($this->_params['code'])) {
$this->Output(ERROR);
}
이 코드 는 읽 기 에 매우 편 하 죠?만약 captchacode_$id 에 code 를 저장 하고 code 가 사용자 가 작성 한 code 와 일치 하면 인증 에 성공 합 니 다.이렇게 되면 인증 코드 검증 과정 이 끝난다.
깊이 생각해 보 니 그 실험 증 번 호 는 이렇게 간단 하지 않다.아래 에 고려 할 만 한 몇 가지 문제 가 있다.
인증 코드 그림 은 자동 으로 삭제 되 지 않 기 때문에 생 성 된 인증 코드 그림 이 있 는 폴 더 의 부피 가 계속 증가 합 니 다.어 떡 하지?Image 클래스 에 서 는 방법 을 제공 하 는$captcha->setGcFreq(5)입 니 다.
구체 적 인 사용법 은 API 를 보 세 요.
$id 를 설정 하고 싶 습 니 다.어떻게 하 죠?정 답 은 ZendCaptche_이미지 에 한 층 더 밀봉 한 다음 generate()방법 을 다시 씁 니 다.
예 를 들 어 저 는 클래스 를 다시 썼 습 니 다.
class Test_Captcha_Image extends Zend_Captcha_Image
{
protected $_fid = "";
public function generate()
{
$word = $this->_generateWord();
$this->_setWord($word);
if ($this->_fid) {
$id = $this->_fid;
}
$this->_generateImage($id, $this->getWord());
if (mt_rand(1, $this->getGcFreq()) == 1) {
$this->_gc();
}
return $id;
}
public function setId($id) {
$this->_fid = $id;
return $this;
}
}
저 는 모든 사용자 에 게 인증 코드 가 하나 밖 에 없 기 를 바 랍 니 다.이 인증 코드 의 그림 이름 은 userid.png 입 니 다. 그러면 이 종류의 코드 를 사용 하 는 것 은 이 렇 습 니 다
$captcha = new Test_Captcha_Image();
$captcha->setWordLen('4')
->setHeight('60')
->setFont(NCHANNEL_FONT_DIR . '/arial.ttf')
->setImgDir(NCHANNEL_CAPTCHA_DIR)
->setDotNoiseLevel('5')
->setLineNoiseLevel('5')
->setId($user_id);
$id = $captcha->generate();
$codeSession = new Zend_Session_Namespace('captcha_code_' . $user_id);
$codeSession->code = $captcha->getWord();
--------------
// session
$codeSession = new Zend_Session_Namespace('captcha_code_' . $this->_params['user_id']);
if ($codeSession == null || strtolower($codeSession->code) != strtolower($this->_params['code'])) {
$this->Output(ERROR);
}
.Zend 의 Captcha 는 기본 적 인 인증 코드 동작 을 봉 인 했 습 니 다.간단 한 인증 코드 를 만 드 는 것 은 기본적으로 내부 코드 를 볼 필요 가 전혀 없 지만 인증 코드 를 더 고 급 스 럽 게 조작 해 야 한다.예 를 들 어 인증 코드 를 수정 하 는 디 스 플레이 문자 등 이 필요 하 다 면 Captcha 의 소스 코드 를 살 펴 보 는 것 이 좋 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Zend_ControllerZend_Controller_Front 는 플러그 인 에이전트 (plugin broker) 를 스스로 등록 하여 플러그 인 이 촉발 하 는 각종 사건 을 관찰 할 수 있 도록 합 니 다.대부분의 경우 개발 자 들 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.