>백엔드 개발 >PHP 튜토리얼 >PHP는 예제 코드의 새로 고침 및 반복 제출을 방지합니다.

PHP는 예제 코드의 새로 고침 및 반복 제출을 방지합니다.

WBOY
WBOY원래의
2016-07-25 09:12:191218검색

PHP 페이지에 대한 직접 접근을 방지하고, 인용만 하면 B 페이지에 직접 접근할 수 없습니다. A에 COOKIE를 추가하고 B가 COOKIE를 결정한 후에 COOKIE를 삭제할 수도 있습니다. 모듈 새로 고침 방지 그래서 이런 상황이 발생하지 않도록 매개변수를 추가하는 것을 고려했습니다. COOKIE와 SESSION을 사용할 수 있지만 COOKIE는 클라이언트 측입니다. 누군가가 COOKIE를 비활성화하면 여전히 악의적으로 클릭 수를 새로 고칠 수 있습니다. SESSION을 사용하는 것이 더 좋습니다. IP URL 매개변수의 MD5 값을 SESSION 이름으로 사용하면 누구나 위조하기 어려울 것 같습니다. 구현 원칙: max_reloadtime =100 설정 //최대 페이지 새로 고침 간격 설정 사용자가 페이지를 처음 열면 현재 시간이 기록되어 session_start에 저장됩니다. 사용자가 두 번째로 페이지를 열 때(session_start가 존재하는지 확인하기 위해) session_start에서 현재 시간을 빼서 차이 time_passed를 얻습니다. 시간이 지나면

예:

  1. session_start()
  2. $k = $_GET['k']
  3. $t = $ _GET['t'];
  4. //새로고침 방지 시간
  5. $allowTime = 1800;
  6. $ip = get_client_ip()
  7. $allowT = md5($ip . $k . $t ) ;
  8. if (!isset($_SESSION[$allowT])) {
  9. $refresh = true
  10. $_SESSION[$allowT] =
  11. } elseif (time() - $_SESSION[$allowT] > $allowTime) {
  12. $refresh = true
  13. $_SESSION[$allowT] = time()
  14. } else {
  15. $refresh =
  16. }
  17. ?>
코드 복사

예제 2, PHP는 중복 제출을 방지합니다. 먼저, 세션 변수를 정의하여 양식의 제출 순서 번호를 저장할 수 있습니다. 이는 "$userLastAction"으로 정의됩니다.

그런 다음 숨겨진 변수를 양식에 추가하고 값을 $userLastAction 1로 설정합니다. > 마지막으로 제출을 처리하기 전에 양식이 제출되었는지 확인합니다.

  1. if($lastAction>$userLastAction and inputIsValid(…)){
  2. $userLastAction; // 시퀀스 번호에 1 추가
  3. / / 양식 데이터 처리
  4. }
코드 복사

제출 페이지:

  1. $_SESSION['code']=mt_rand(1,1000);//1~1000 사이의 임의의 숫자 생성
  2. ?>
코드 복사

제출된 페이지:

  1. if($_SESSION['code']!=$_REQUEST['scode']){

  2. echo " 다시 제출하지 마세요.";
  3. 종료;
  4. }
  5. $_SESSION['code']=0

  6. /* 개선된 버전

  7. PHP는 사용자가 페이지를 새로 고치거나(새로 고침 또는 다시 로드) 양식 콘텐츠를 반복적으로 제출하는 것을 방지합니다.
  8. 양식 변수의 내용은 $_POST['name']에 의해 참조되므로 양식을 처리한 후 $_POST['name']을 직접 삭제할 수 있습니다(unset()). 설마. 페이지가 기본적으로 양식 콘텐츠를 캐시할 수 있으므로 $_POST['name']이 삭제되더라도 새로 고침 후에도 $_POST['name']에 값이 할당되며 여전히 유효합니다. 는 세션을 사용하여 해결할 수 있습니다. 먼저 세션에 400과 같은 값을 할당합니다. 첫 번째 제출이 성공한 후 세션 값을 변경합니다. 두 번째 제출 시 세션 값이 400이 아닌 경우 양식의 데이터를 확인합니다. 더 이상 처리되지 않습니다. 세션의 유효 시간을 설정할 수 있습니까?
  9. */
  10. if (isset($_POST['action']) && $_POST['action'] == '제출됨') {
  11. session_start()
  12. isset($_SESSION[ 'num']) 또는 사망("세션 없음")
  13. if ($_SESSION['num']==400){
  14. print '
    '; print_r($_POST) ; </li>
    <li> 인쇄 '<a href="'. $_SERVER['PHP_SELF'] .'">다시 시도하세요</a>' </li>
    <li> 인쇄 '
    '; $_SESSION['num']=500;
  15. } else {
  16. print '
    '; print_r($_POST); echo "어떻게 제출하셨나요?"; print '
    ';
  17. }
  18. } else {
  19. session_start() 또는 die("세션이 시작되지 않았습니다")
  20. $_SESSION['num']= 400; 🎜>?>
  21. 이름:
  22. 이메일:
  23. 맥주:
  24. }
  25. ?>

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