2017-01-25 3 views
0

간단히 말하자면, 로그인 시도가 5 회 실패한 후 세션을 삭제해야하며 30 분 (로그인이 차단 된 사용자의 경우)이고 로그인 양식이 다시 나타나도록 페이지를 다시로드해야합니다. 나는 세션을 사용하고 있으며, 대부분 내 사이트에서 작동합니다. 그들이 로그인 시도의 한계에 도달하면 내 양식은 사라지고, 세션은 겉으로는 파괴되지만 페이지는 다시로드되지 않습니다. (저는 자바 스크립트를 사용하고 있습니다). 여기 세션이 삭제 된 후 어떻게 페이지를 다시로드합니까?

이 양식을 사용하여 페이지에 사는 PHP 코드입니다 :

<?php 
include "includes/auth.php"; 
$_login_count = $_SESSION['login_count']; 
?> 

<!DOCTYPE html> 
<html> 
<body> 
<? 

$_show_form = false; 

if($_login_count < 5) { 
    $_show_form = true; 
} else { 
    if(isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 30)) { 
     // last request was more than 30 minutes ago 
     session_unset();  // unset $_SESSION variable for the run-time 
     session_destroy(); // destroy session data in storage 
     header('Location: http://localhost:8000/login.php'); 
    } 
} 

$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 

if ($_show_form) {?> 
    <div class="loginBox" id="login-box"> 
     <form id="login-form" action="" method="post" > 
      <label for="uname">Username:</label> 
      <input type="text" name="uname" required autofocus/> 

      <label for="pwd">Password:</label> 
      <input type="password" name="pwd" required/> 

      <input type="submit" name="submit" value="Login" /> 

     </form> 
    </div> 
<?} 
?> 
<script defer src="funcs.js"></script> 
</body> 
</html> 

을 그리고 여기 내 JS의 FUNC의 : 정확하지 JS의 경우

var checkPage = setInterval(
    function(){ 
     console.log('Checking page.'); 
     var isFormThere = document.getElementById('login-box'); 

     if(isFormThere) { 
      console.log('Found form!'); 
     } else { 
      window.location.reload(true); 
     } 
    }, 
    33000 
); 

내가 아는 내 그것을 어떻게해야 그러나 나는 페이지가 내가 원하는 것을하고 있는지 확인하기 위해 그것을 사용하고있다. 어떤 제안?

+0

내가 제대로 이해한다면 더 확신합니다. 따라서 세션이 만료 될 때 페이지를 relaod 하시겠습니까? 단계와 조건을 제공 할 수 있습니까? – ChaudPain

+0

JS 리로드를 얼마나 오래 기다리고 계셨습니까? 간격은 33 초입니다. 이 값을 줄이려고 시도하십시오 (예 : 33000). 또는 JS 코드가 제대로로드되지 않았습니다. 콘솔에 오류가 있습니까? –

+0

@ Łukasz - 예, 쿠키의 수명보다 긴 대기 시간을주기 위해 타이머를 40 초로 변경했습니다. 이제 다시로드되고 오류 메시지가 표시되지만 양식은 표시되지 않습니다. 두 번째로 40 초마다 다시로드됩니다 (화면에 여전히 양식이 표시되지 않음) 화면에 양식이 표시되지만 오류 메시지가 계속 표시됩니다. –

답변

0
당신은 <? ?>

을 사용하고

은 서버에 open_short_tags를 사용할 수 있습니다?

그렇지 않으면, 당신은 자바 스크립트없이 PHP에서이 작업을 수행 할 수 <?php ?>

+0

예, 사용하도록 설정되었습니다. –

0

<? ?>를 교체합니다.

리디렉션하고이 다시 리디렉션 경우, 응답에 데리러 다시 헤더에 PARAM을 보낼 경우 :

header('Location: http://localhost:8000/login.php?refresh=true');

if(isset($_GET['refresh']) && $_GET['refresh'] == 'true') 
    header('Location: http://localhost:8000/login.php'); 
관련 문제