2017-01-25 166 views
0

長話短說,我需要在5次不成功的登錄嘗試和30分鐘(這是多久用戶被阻止登錄)之後銷燬會話,然後重新加載頁面,以便登錄窗體再次出現。我正在使用SESSIONS,並且大部分事情都在我的網站上運行。如果他們達到登錄嘗試的限制,我的表單將消失,SESSION看起來會破壞,但頁面不會重新加載(我正在使用JavaScript)。如何在會話銷燬後重新加載頁面?

這裏是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:

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 
); 

我知道我如果JS不正是它應該如何但我只是用這種方式來確保頁面正在做我想做的事情。有什麼建議麼?

+0

我不知道如果我理解正確。所以你想在會話過期時重新設置頁面?你能提供步驟和條件嗎? – ChaudPain

+0

你等了多長時間JS重新加載?你有33秒的時間間隔。嘗試減少此值(例如2000而不是33000)。或者JS代碼沒有正確加載。控制檯中是否有錯誤? –

+0

@Łukasz - 是的,我已將計時器更改爲40秒,使其等待的時間比Cookie的壽命長。它現在重新加載,顯示錯誤消息,但沒有形式。第二次在40秒後重新加載(因爲它仍然沒有看到表單)我在屏幕上看到了表單,但是錯誤信息仍然存在。 –

回答

0

您使用<? ?>

是您的服務器上啓用open_short_tags

否則,<?php ?>

+0

是的,它已啓用。 –

0

更換<? ?>你可以在PHP中做到這一點沒有JavaScript的。

如果發送PARAM早在頭重定向並把它撿起來的響應,如果它的存在,再次重定向:

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

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