2017-01-17 4 views
2

ユーザーがログインしたときに問題が発生し、ログアウトしたときにセッションを破棄して、戻るボタンをクリックしてページを訪問しようとしましたが、ブラウザのボタンをクリックすると、ログアウトしてもボタンをクリックしてタスクを実行することができます。ログアウト後にバックページを訪問する方法を停止する方法

これは私のフォームコードです:../FrontEndFiles/AdminLogin.php

クリックで
<div class="center"> 
    <form name="myForm" method="post" action="../Admin/AdminData.php" onsubmit="return validateForm()"> 
     <label>User name:</label> 
     <input type="text" name="user_name" placeholder="User"> 
     <br> 
     <br> 
     <label>Password:</label> 
     <input type="password" name="password" placeholder="Password"> 
     <br> 
     <input type="submit" name="login_Admin" value="login">    
    </form> 
</div> 

コード以下の送信ボタンを実行します:../Admin/AdminData.php

if (isset ($_POST['logout'])) { 
    $dbname->logout(); 
} 

をし、次の関数を呼び出します。

public function logout() { 
    unset($_SESSION["dbuser_name"], $_SESSION["dbpassword"], $_SESSION["dbid"]); 
    session_unset(); 
    Session_destroy(); 
    header('Location: ../FrontEndFiles/AdminLogin.php'); 
    exit(); 
} 

これは、管理者のログインコードです:

public function loginAdmin($login_admin) { 
    if (!empty($login_admin[0]) || !empty($login_admin[1])) { 
     $query = "SELECT Patient_ID FROM Patient WHERE Patient_name = '$login_admin[0]' and Patient_password = $login_admin[1] and Role = 'a'"; 
     //var_dump($query); 
     $abc = $this->conn->query($query); 
     $row = mysqli_num_rows($abc); 

     if ($row == 1) { 
      while ($row1 = $abc->fetch_assoc()) { 
       $_SESSION["dbuser_name"] = $row1['Patient_name ']; 
       $_SESSION["dbpassword"] = $row1['Patient_password']; 
       $_SESSION["dbid"] = $row1['Patient_ID']; 
      } 
      header('Location: ../FrontEndFiles/Admin_Index.php'); 
     } else { 
      header('Location: ../FrontEndFiles/AdminLogin.php'); 
     } 
    } else { 
     header('Location: ../FrontEndFiles/AdminLogin.php'); 
    } 
} 
+0

一部のブラウザでは、キャッシュ内の前のページを維持しないと、そのユーザーがORない記録されます確認し、各ページの上部に、PHPのコードでこれを実装します戻るボタンを使用しているときにサーバーに再度照会してください。 –

答えて

2

以下にindex.phpをOR header.phpの書き込みあなたが何をする必要があるか、ログインされずにページを訪問からユーザーを防止するために、ユーザーが実際にログインしているかどうかを確認する。

例えば:

// Prevent unauthorized users from visiting this page 
if (!$_SESSION['dbuser_name']) { 
    header("Location: login.php"); 
    exit; 
} 

header(...)exit;をさらに実行からスクリプトを防止します。ブラウザーがリダイレクトをフォローしないようにする方法があります。 exit;は、ユーザーがログインすることなく、任意のページのコンテンツを見ることができないことを確認します。また

、ユーザーがログアウトすると、確認してくださいすべてのそれはデータだあなたクリア:。

if (!isset($_SESSION)) { 
    session_start(); 
} 

session_destroy(); 
unset($_POST); 

header("Location: login.php"); 
exit; 

この意志おそらくあなたの問題を解決するでしょう。

別のメモあなたのセッションにユーザーのパスワードを保存しないことをお勧めします。

+0

これは私の問題を解決します。 –

0

キャッシュなし

<meta Http-Equiv="Cache-Control" Content="no-cache"> 
<meta Http-Equiv="Expires" Content="0"> 
0

メインファイル例のためのメタタグを使用します。コード

if(!$_SESSION["dbuser_name"]) 
{ 
    header('Location: login.php'); 
} 
+2

ヘッダー( 'Location:... '。)の後に' die; 'を追加する習慣を得てください。 –

0

あなたのAdmin_Index.phpの上にこのコードを追加してください。

if(!isset($_SESSION['dbuser_name']) || !isset($_SESSION['Patient_password']) || !isset($_SESSION['Patient_ID'])) 
{ 
    header('Location: ../FrontEndFiles/AdminLogin.php'); 
    exit(); 
} 

これは、ユーザーログが出力されてAdminloginに入力しようとすると、ログインページにリダイレクトされます。

0

ごfunctions.inc.phpまたはすべてのあなたのスクリプトをロードするすべてのファイルにこの機能を追加します。

function isAuthorized(){ 
    if (isset($_SESSION) && isset($_SESSION['dbid'])){ 
     return true; 
    } 
    return false; 
} 

と承認があなただけやる必要とされているすべてのページ:

if (!isAuthorized()){ 
    header("Location: login.php"); 
    die(); // Stop the script! Browsers can choose to ignore the redirect. 
} 

isAuthorized関数内でリダイレクトとdie()を行うことができます。

0

ログインページにリダイレクトしない場合は

<?php 
     if(!isset($_SESSION['isLogged'])) : 
     header("Location: login.php"); 
?> 
関連する問題