2017-01-25 7 views
0

ロングストーリーでは、ログイン試行が5回失敗した後にセッションを破棄し、ログインフォームが再び表示されるようにページをリロードする必要があります。私はセッションを使用しており、ほとんどのものは私のサイトで動作します。彼らはログイン試行の限界に達した場合私のフォームは消えて、セッションは一見破壊しますが、ページはリロードされません(私はそのために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秒です。この値を減らしてみてください(たとえば、33000の代わりに2000)。または、JSコードが正しくロードされていません。コンソールにエラーがありますか? –

+0

@Łukasz - はい、私はクッキーの寿命よりも長い待ち時間を与えるために40秒にタイマーを変更しました。これで、リロードされ、エラーメッセージは表示されますが、フォームは表示されません。もう40秒後にもう一度リロードすると(フォームに表示されないまま)、画面にフォームが表示されますが、エラーメッセージはそのままです。 –

答えて

0

あなたは<? ?>

サーバー上で有効であるopen_short_tagsを使用していますか?

そうでなければ、あなたはJavaScriptをせずに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'); 
関連する問題