2

私の問題はかなり初歩的なものに思えるかもしれませんが、コードの何が問題なのかわかりません。次のような非常に単純なログイン システムがあります。

login.php:

<?php  
session_start();

if ($_SESSION['loggedin'] = 1) {
   header("Location: admin.php");
}

if ($_GET['login']) {
     // Only load the code below if the GET
     // variable 'login' is set. You will
     // set this when you submit the form

     if ($_POST['username'] == 'thenemis'
         && $_POST['password'] == 'slustice') {
         // Load code below if both username
         // and password submitted are correct

         $_SESSION['loggedin'] = 1;
          // Set session variable

         header("Location: admin.php");
         exit;
         // Redirect to a protected page

     } else echo "Wrong details";
     // Otherwise, echo the error message
}
?>

<form action="?login=1" method="post" accept-charset="utf-8">  
                <fieldset>
                  <label for="username">Usermame:</label>
                  <input type="text" name="username" placeholder="username" required>
                  <label for="password">Password:</label>
                  <input type="password" name="password" placeholder="password" required>
                  <input type="submit" value="Login"> </td>
                </fieldset>
</form> 

これはうまくいきます。

admin.php:

<?php

    session_start();
    // Call this function so your page
    // can access session variables

    if ($_SESSION['loggedin'] != 1) {
        // If the 'loggedin' session variable
        // is not equal to 1, then you must
        // not let the user see the page.
        // So, we'll redirect them to the
        // login page (login.php).

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

?>

<p><a href="logout.php">Log out</a></p>

ここでの問題は、次のようなログアウト URL をクリックしても、システムがログを記録し続けることです。

logout.php:

<?php
    session_start();
    session_destroy();
    header("Location: login.php");
?>

ログアウト手順には明らかに基本的な間違いがありますが、見つけられないようです...事前に助けてくれてありがとう!

4

6 に答える 6

2

ここで割り当てを行っています:

if ($_SESSION['loggedin'] = 1) {
    header("Location: admin.php");
}

そして、あなたは比較をする必要があります

if ($_SESSION['loggedin'] == 1) {
    header("Location: admin.php");
}
于 2013-03-22T10:06:46.003 に答える
0

次の変更を試してみてください。

login.phpで:

if ($_SESSION['loggedin'] == 1) {
   header("Location: admin.php");
}

logout.phpで:

<?php
    session_start();
    ob_start();
    session_destroy();
    $_SESSION['loggedin']=""; //Just empty that session variable
    header("Location: login.php");
?>

これはあなたの問題を解決するのに役立つかもしれないと思います。

于 2013-03-22T10:24:23.243 に答える
0

login.php では、ユーザーの詳細が確認された後に session_start を開始しませんでした...

session_start(); を追加してみてください。$_SESSION['loggedin'] = 1 の前;

これはあなたのために働くかもしれません...

logout.php で

この行を使用してセッション変数の設定を解除する前に

unset($_SESSION['loggedin']);

于 2013-03-22T10:01:42.053 に答える
0

これを試して

<?php
    session_destroy();
    header('Location: index.php');
    exit();
?>
于 2013-03-22T10:00:54.587 に答える
0

admin.phpファイルを変更する

<?php
    session_start();

    if (!isset($_SESSION['loggedin'])) {
        header("Location: login.php");
        exit;
    }

?>

<p><a href="logout.php">Log out</a></p>
于 2013-03-22T10:01:28.547 に答える
0

php.netマニュアルから:

ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッション ID も設定解除する必要があります。Cookie を使用してセッション ID を伝達する場合 (デフォルトの動作)、セッション Cookie を削除する必要があります。そのために setcookie() を使用できます。

安全にログアウトするには、このコード(php.net からコピー) を使用します。

<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();
?>
于 2013-03-22T10:04:42.167 に答える