웹 페이지를 다시로드 할 때마다 http 게시 요청이 서버로 전송되지 않도록포스트/리디렉션/패턴 가져 오기를 구현했지만 문제가 발생합니다.
Welcome
비밀번호가
test
로 설정된 경우에만한 번메시지가 표시되어야합니다.
. 제 경우에는 네 번째 줄을 주석 처리하지 않으면 표시되지 않습니다.
해당 줄을 제거하면 PRG 패턴이 적용되지 않으므로 각 페이지를 다시로드 할 때마다 양식이 다시 제출됩니다
아래 코드는 완전한 작업 코드이며 테스트를 위해 코드에 직접 붙여 넣습니다. 또는 여기
<?php
$self = htmlspecialchars($_SERVER["PHP_SELF"]);
if(isset($_POST['Code2']) && ( $_POST['Code2'] == "test")) {
header('Location: '.$self, true, 303);exit; //redirection on the same page
?> <span id="welcome-msg"></span> <!-- Display welcome Message -->
<?php } ?>
<form method="post">
Code:<br>
<input type="text" name="Code2"> <input type="submit">
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$("#welcome-msg").html("Welcome").fadeOut(5500);
</script>
- 답변 # 1
- 답변 # 2
쿠키 대신 PHP 세션을 사용하는 간단한 PoC가 있습니다. 클라이언트 세션은 쿠키로 식별되지만 클라이언트는 세션이 저장하는 데이터를 제어 할 수 없습니다. 이론적으로는 로그인 방법이 여전히 매우 기본적이고 최소한 HTTPS를 통해 수행되어야하지만 더 민감한 데이터를 "환영"메시지에 넣을 수 있습니다.
<h2>code: "test"</h2> <?php $self = htmlspecialchars($_SERVER["PHP_SELF"]); if(isset($_POST['Code2']) && ( $_POST['Code2'] == "test")) { setcookie('welcome','Cookie',time()+(20),'/'); //cookie will expire in 2 seconds header('Location: '.$self, true, 303); exit; } else if(isset($_POST['Code2']) && ( $_POST['Code2'] !== "test")){ setcookie('welcome','Cookie',time()-(20),'/'); //if password is incorrect delete cookie header('Location: '.$self, true, 303); exit; } else if (isset($_COOKIE['welcome'])) { //if cookie is active ?><span id="welcome-msg">Welcome</span> <?php } else if (!isset($_COOKIE['welcome'])){ //cookie expired or invalid password ?> <span id="Expired">Cookie expired, not set yet or Incorrect Password</span> <?php } ?> <form method="post"> Code:<br> <input type="text" name="Code2"> <input type="submit"> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> $("#welcome-msg,#Expired").fadeOut(5500); </script>
- 답변 # 3
귀하의
<?php // Start PHP session management session_start(); $self = htmlspecialchars($_SERVER["PHP_SELF"]); if (isset($_POST['Code2']) && $_POST['Code2'] === "test") { // Code is correct, flash the welcome message after redirect $_SESSION["flash_welcome"] = true; header('Location: '.$self, true, 303); exit; } else if (isset($_POST['Code2']) && $_POST['Code2'] !== "test") { // Code was sent but is incorrect, flash the incorrect message after redirect $_SESSION["flash_incorrect"] = true; header('Location: '.$self, true, 303); exit; } if ($_SESSION["flash_welcome"]) { // Display welcome message ?><span id="welcome-msg">Welcome</span><?php } if ($_SESSION["flash_incorrect"]) { // Display incorrect message ?><span id="incorrect-msg">Incorrect code</span><?php } // Clear flash messages $_SESSION["flash_welcome"] = false; $_SESSION["flash_incorrect"] = false; ?> <form method="post"> Code:<br><input type="text" name="Code2"> <input type="submit"> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script>$("#welcome-msg,#incorrect-msg").fadeOut(5500);</script>
리디렉션 후 및<span id="welcome-msg"></span>
뒤에 위치 if 문 내부 조건이 존재하는지 여부는 스팬이 표시되지 않습니다. "if"외부로 이동하거나 리디렉션 및 "exit ()"앞에 추가해야합니다.exit()
https://www.tehplayground.com/Hf25u68JYljxkjQu
<?php $self = htmlspecialchars($_SERVER["PHP_SELF"]); if(isset($_POST['Code2']) && ( $_POST['Code2']== "test")) { header('Location: '.$self, true, 303); exit; } ?> <span id="welcome-msg"></span> <form method="post"> Code:<br> <input type="text" name="Code2"> <input onclick="event.preventDefault()" type="submit"> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> $("#welcome-msg").html("Welcome").fadeOut(5500); </script>
관련 자료
- html - 입력 필드 빈 유효성 검사가 작동하지 않습니다
- 바운드 유효성 검사를 벗어난 C ++ 연결된 목록 사용자 입력으로 인해 프로그램이 종료 됨
- uipath - 파일 경로를 입력 인수로 Orchestrator API StartJobs에 전달할 때 유효성 검증이 실패 함
- pyqt4 - PyQt를 사용하여 Python에서 유효성 검사와 함께 입력 pup up 상자
- angularjs - 전화 번호에 대한 사용자 지정 유효성 검사 패턴을 작성하는 방법
- angular7 - 클록 입력 검증
- javascript - 입력 필드 검증 및 표시된 조건
- html - 비밀번호 길이를 지정하는 입력 태그의이 패턴 속성이 작동하지 않습니까?
- javascript - 유효성 검사 입력 우편 번호 멕시코 zippopotam
- architecture - 다른 서비스의 데이터에 따라 마이크로 서비스의 입력 검증
- salesforce marketing cloud - 특정 입력에 대한 필드 검증
- angular - 반응 형 및 사용 된 유효성 검사로 입력 주입
- reactjs - 다른 필드의 onBlur에 기반한 입력 텍스트 필드에 대한 사용자 정의 Formik 검증
- regex - 영숫자, 밑줄, 대시 및 점에 대한 HTML 입력 패턴
- 패턴 유효성 검사 표현식, 각도의 첫 글자 대문자?
- regex - 패턴 입력을 한 번만 사용하는 방법은 무엇입니까?
- html - Angular 6의 입력 유형 번호 확인
- excel - 오류 메시지를 얻기위한 데이터 유효성 검사 (셀의 입력이 목록의 이름과 동일하지 않음)
- Go에서 콘솔 입력 유형 유효성 검사를 처리하는 방법은 무엇입니까?
- PHP 양식 유효성 검사 후 양식 입력 유형 선택 데이터가 지워지는 것을 중지하는 방법은 무엇입니까?
- javascript : 필수 필드가 비어있는 경우에도 취소에 대한 제출 버튼 활성화
- javascript : JS는 PHP가 이메일을 보내기 전에 양식 데이터를 제거합니다.
- php : AJAX를 통해 HTML 체크 박스 양식 데이터 보내기
- php : $ _POST는 한 번만 트리거됩니다. 버튼의 입력을 계속 듣고 처리하려면 어떻게해야합니까?
- 재사용 된 PHP 양식 제출의 문제점은 무엇입니까?
- javascript : 페이지는 VueJS로 계속 새로 고침됩니다.
- 내 HTML /PHP 웹 사이트에서 멋지게 보이도록 JSON을 어떻게 구문 분석합니까?
- JavaScript와 Ajax를 사용하여 PHP 양식을 만들려고합니다. 하지만 작동하지 않는 경우 제출을 클릭하면 아무것도하지 않습니다. 이걸 도와주세요
- php : 구문 오류, 메소드 isset을 사용할 때 예기치 않은 'if'
- javascript : PHP 절전 기능이 내 HTML 페이지를 중지하지 않도록하려면 어떻게해야합니까?
여기 있습니다. 와이즈 비즈 열쇠입니다.
<올>사용자 비밀번호가 정확하면 쿠키를 2 초 동안 설정하고
사용자를 동일한 페이지로 리디렉션
비밀번호가 틀리면 여전히 사용자를 동일한 페이지로 리디렉션하고 해당 쿠키를 삭제하십시오
쿠키 :
사용자 컴퓨터에서 쿠키가 활성화 된 경우 환영 메시지 표시
그렇지 않으면 다른 메시지를 표시하거나 아무 것도하지 마십시오 (마지막 문장을 삭제할 수 있음)
PhpFiddle 쿠키 방식.
업데이트: 주석을 기반으로 PHP 세션을 사용하는 다른 방법이 있습니다. 이 문제에 대한 세션과 쿠키에 대한 제안은 무엇입니까? 의견을 쓰십시오!
세션 방식