>

웹 페이지를 다시로드 할 때마다 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 초 동안 설정하고
    사용자를 동일한 페이지로 리디렉션

    비밀번호가 틀리면 여전히 사용자를 동일한 페이지로 리디렉션하고 해당 쿠키를 삭제하십시오

    쿠키 :

    사용자 컴퓨터에서 쿠키가 활성화 된 경우 환영 메시지 표시

    그렇지 않으면 다른 메시지를 표시하거나 아무 것도하지 마십시오 (마지막 문장을 삭제할 수 있음)

    PhpFiddle 쿠키 방식.

    업데이트: 주석을 기반으로 PHP 세션을 사용하는 다른 방법이 있습니다. 이 문제에 대한 세션과 쿠키에 대한 제안은 무엇입니까? 의견을 쓰십시오!

    세션 방식

    Cookies
    
    

  • 답변 # 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>

관련 자료

  • 이전 git - bash를 사용하여 마스터를 모든 원점으로 병합
  • 다음 git - kubernetes gitrepo 볼륨 - 자동 재배치?