java - 이미지 인증코드 구현 원리
怪我咯
怪我咯 2017-05-27 17:41:18
0
4
1010

**테스트 웹사이트:
http://con.monyun.cn:9960/acc...

이 페이지에 인증 코드가 있습니다. 이 인증 코드의 URL은

입니다.

<img src="../aut_checkCode.hts?=0.8963835985936632" class="icd">

인증코드 클릭 시 표시되는 이미지는 어떻게 변경하나요? ?

지침:
(1) 인증 코드 이미지를 클릭하면 img 태그의 src 속성 뒤에 있는 숫자가 변경됩니다. 숫자가 변경되면 브라우저가 데이터를 얻기 위해 새 URL에 액세스하게 됩니다.

(2) 새 URL의 쿼리 문자열에는 값만 포함되어 있고 이름은 포함되어 있지 않습니다. 이는 서버 측에서 이 숫자 값을 얻을 수 없다는 의미입니까?
0.8963835985936632

서버 측에서 이 숫자 값을 얻을 수 있는 방법이 있나요? ?

(3) 디지털 가치를 얻을 수 있는 방법이 없는 경우. 서버 측은 요청을 처리하고 이진 이미지 데이터를 반환합니다.
이제 사진에 대한 토큰이 생성되나요? 생성된 경우 이를 클라이언트에 전달하는 방법은 무엇입니까?

(4) 사용자가 인증 코드를 제출합니다. 서버 측 처리, 그렇다면 사용자가 제출한 인증 코드가 올바른지 어떻게 확인할 수 있나요?
서버가 Redis로부터 올바른 인증 코드를 어떻게 얻을 수 있나요?

모두들 알려주세요
답변하시면 엄지손가락 꾸욱 눌러주세요! **

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(4)
Ty80

초대해 주셔서 감사합니다. 일반적으로 인증 코드의 작업 단계는 다음과 같습니다.

  1. 실제로 서버는 4자리 문자열을 생성하고, 이 4자리 문자열을 사용하여 이미지를 생성하고 response中, 返回给浏览器, 并把这个4位字符串存在了当前session.

  2. 에 씁니다.
  3. 브라우저가 제출된 후 제출된 문자열을 session의 문자열과 비교하여 인증 코드를 완성하세요.

사용하지 않는 경우session比如可以设置到cookie中如下(key=test, value=test예를 들어 쿠키에서 다음과 같이 설정할 수 있습니다(key=test, value=test):

淡淡烟草味

1. 다음 숫자 변경은 브라우저 캐싱 문제를 방지하기 위한 것입니다.
2. 서버는 시간 파일에 따라 자동으로 인증 코드를 생성합니다. )

3. 인증코드의 원리는 먼저 난수열을 생성하여 세션에 저장한 후 최종적으로 이미지를 생성하여 클라이언트에게 전송하여 인증코드에 대한 답변을 제출하는 것입니다. 서버는 귀하의 답변을 세션의 임의의 숫자와 비교합니다. 이는 확인이 성공했음을 의미합니다

4.좋아요 3

5. Redis와 함께 사용할 경우 일반적으로 토큰이나 세션을 사용하므로 다음 키와 같이 인증 코드가 속한 사용자를 식별할 수 있습니다

으아아아

의사코드

인증 코드 받기

으아아아

확인

으아아아
为情所困

첫 번째: 일반적인 인증 코드 과정은 설명하신 내용과 동일합니다.

두 번째:
인증 코드를 생성하려면 백그라운드에 값을 전달할 필요가 없습니다.
제공한 예에서 마지막 숫자 문자열의 변경은 실제로 URL을 다시 요청하는 것입니다. 일반적으로 사진 링크는 확인 코드를 생성하는 링크를 가리킵니다. js를 사용하여 클릭 후 연결을 변경합니다. 즉, 그 뒤에 임의의 숫자 문자열을 추가하면 브라우저가 src 뒤의 연결이 변경되었음을 감지할 수 있습니다. 이를 위해 무작위 문자열이 사용됨) 생성된 새로운 인증 코드 이미지를 얻기 위해 배경을 다시 요청합니다.

세 번째:

바이너리 이미지가 백그라운드에서 반환된 후에는 토큰을 생성할 필요가 없지만 인증 코드를 생성하는 데 사용되는 숫자 문자열을 세션에 저장해야 합니다. 서버측에 저장하는 것이 안전하며 클라이언트에 반환할 필요가 없습니다.

넷째:

사용자가 제출한 인증 코드를 입력한 후 사용자가 제출한 인증 코드 번호와 서버 세션의 번호를 비교합니다. 동일하면 검증이 통과됩니다.

마지막으로 Redis에 인증 코드를 넣는 작업은 Redis에 세션을 저장하는 방법에 대한 관련 정보를 검색할 수 있습니다.

Ty80

백그라운드 코드는 일반적으로

public void genAuthImage(){

//토큰 uuid 생성
//쿠키 쓰기
response.addCookie();--->실제로 set-cookie 헤더 정보 설정

//그림을 생성하고 response
end
}
프론트 엔드:

를 사용하여 작성합니다.

프런트 엔드:

크롬 확인

콘솔

불확실한 결론: 응답 유형이 image/jpg인 경우 쿠키를 설정할 수 없습니다.
혹시 보신 분 계시다면 이유를 설명해 주실 수 있나요?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!