9

で困っていsession_destroy()ます。

ユーザーがログアウトを押すと、セッションを破棄する必要があります。次のコードを書きました。

Logout.php

<?php
    session_start();
    session_destroy();
    header("location: LoginViewController.php");
?>

log outを押した後、ブラウザの戻るボタンを押すと、 Login.phpページに以前のログイン ユーザー ページとセッション ユーザー名が表示されます。

ログイン.php

<?php
    session_start();
    $_SESSION['user']=  $_GET['username'];
    echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'</div>"';
    echo '<a href="Logout.php" style="text-align:right">Logout</a>';

LoginViewController.php

<?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

    $Username = $_POST['uname'];
    $Password = $_POST['pwd'];
    $User_Type=$_POST['type'];

    If (!(empty($Username) && empty($Password) && empty($User_Type))){
        $model = new UsersModel();
        $rowsCount = $model->checkUser($Username,$Password,$User_Type);

        if ($rowsCount!=0){
            header("location:login.php?username=".$_POST['uname']."");  
        } else {
            echo '<script type="text/javascript">alert("Enter username and password correctly");
            window.location.href="LoginViewController.php";</script>';
        }
    }

なぜそのように機能しているのかわかりません。

私が間違いを犯した場所を見つけるのを手伝ってください。

ログアウト後にブラウザの戻るボタンを無効にしたい。

4

7 に答える 7

8

login.php ページ:

<?php 
    if (isset($_POST['uname'], $_POST['pwd'], $_POST['type'])) {
        $Username = $_POST['uname'];
        $Password = $_POST['pwd'];
        $User_Type=$_POST['type'];
        if (!(empty($Username) || empty($Password) || empty($User_Type))) 
        {
             $model = new UsersModel();
             $rowsCount = $model->checkUser($Username,$Password,$User_Type);
             if ($rowsCount!=0)
             {
                  $_SESSION['user'] = $Username;
                  header("Location:LoginViewController.php");

             } else {
                  echo 'Bad user';
             }
        } else {
             echo 'Please, fill all inputs';
        }
    } else {
        echo 'Bad form sent';
    }
?>
<form name="f1" method="POST" action="" >
    // inputs
</form>

LoginViewController.php :

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}
echo 'You have successfully logged as '.$_SESSION['user']
?>

そして、ヘッダーを追加して、ブラウザーにページの再検証を強制します。

logout.php :

<?php 
session_start();
session_destroy();
$_SESSION = array();
header("location: login.php");
?>
于 2013-06-06T12:30:32.963 に答える
4

これは、ページの詳細を保持しているブラウザーのキャッシュが原因です。ページを更新するか、プライベート エリア内をさらに移動すると、ログイン ページが表示され、何も表示されなくなります。システムが正しく構成されていることを確認してください。

それ以外の場合は、ブラウザーがページをキャッシュしないように強制し、サーバーにそのページの新しい要求を送信することができます。

header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
于 2013-06-06T11:44:02.660 に答える
2

ログアウト スクリプトからリダイレクトする必要があります。

例えば:

header("Location: index.php");

ユーザーが次回ヒットすると、再度 logout.php ページに移動し、そこで再度チェックを行って再度リダイレクトできます :) ユーザーが再試行すると、無限ループになります。

于 2013-06-06T11:43:40.207 に答える
1

これが私のLoginController.phpです

  <?php

     header("Cache-Control: private, must-revalidate, max-age=0");
     header("Pragma: no-cache");
     header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

//フォームを送信する場合は、詳細をデータベースに挿入します

   $Username = $_POST['uname'];
    $Password = $_POST['pwd'];
    $User_Type=$_POST['type'];
    session_start();

   If (!(empty($Username) && empty($Password) && empty($User_Type))) 
   {

    $model = new UsersModel();

    $rowsCount = $model->checkUser($Username,$Password,$User_Type);

    if ($rowsCount!=0)
    {
        $_SESSION['user'] = $Username;
       header("location:login.php");

    } else 
        {
        echo '<script type="text/javascript">alert("Enter username and password correctly");
        window.location.href="LoginViewController.php";</script>';
           }
        }

    }
     ?>

これが私のログインページ(login.php)の後のもので、セッションのユーザー名とログアウトリンクが表示されます

    <?php

      header("Cache-Control: private, must-revalidate, max-age=0");
      header("Pragma: no-cache");
      header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

      session_start();
     if(!isset($_SESSION['user']))
     {
       header('Location: LoginViewController.php');
        exit();
       }
      echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'
       <a href="Logout.php" style="text-align:right">Logout</a></div>"';
        ?>

ここに私のLogout.phpがあります

   <?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
     session_start();
      session_destroy();
      header("Location: LoginViewController.php");
   ?>
于 2013-06-11T05:39:33.103 に答える
0
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
于 2013-06-06T12:41:31.127 に答える
0

ログインページとログイン検証ページを除くすべてのページでこのコードを試してください。

session_start();

if (!$_SESSION['sesuname']) {
    echo "You are not logged in.";
    exit();
} else {    
    /* All other codes must be here */
}
于 2015-09-16T06:14:40.850 に答える
0
if (window.history) {
window.history.forward(1);
}
于 2013-06-06T11:53:03.137 に答える