2

ここで問題を診断するのは少し難しいので、私の説明が少し曖昧な場合は申し訳ありません。私はかなり標準的なログインシステムを持っており、ほとんどの部分で正常に機能しています。今日、問題に気づきましたが、ブラウザを再起動すると、最初にadmin2.phpにアクセスして、admin1.phpに戻らない限り、admin1.phpにログインできません。

その後、すべてが完全に機能します。ログアウトして再度ログインできます。

これが私が持っている2つのファイルです...

admin1.php

<style>
#form_contain {
    text-align: center;
}

form {
    display: inline-block;
    margin: 100px 0 0 !important;
}

label {
    display: table-cell !important;
    vertical-align: middle;
}

input[type='text'], input[type="password"] {
    float: left;
    display: table-cell !important;
    margin: 0 0 10px;
    height: 25px;
    width: 260px !important;
}
</style>

<?php
session_start();
include "lib/head.php";

function protect($string)
{
 $string = mysql_real_escape_string($string);
 return $string;
} 

$user = $_SESSION['username']; 

if(!$_POST['submit'])
{
    if ($_SESSION['logged'] == true) {
        include_once("admin_main.php");
        }
    else {

?>

<div id="form_contain">
    <form method="post" action="<?=$_SERVER['PHP_SELF']; ?>">
        <label>Username:</label>
        <input type="text" name="username" maxlength="16">
        <br>
        <label>Password:</label>
        <input type="password" name="password" maxlength="16">
        <br>
        <br>
        <br>
        <input type="submit" name="submit" value="Login" class="btn">
    </form>
    <p id="alert"></p>  
</div>


<?php
    }
}
else
{
  $user = protect($_POST['username']);
  $pass = protect($_POST['password']);

if($user && $pass)
{
    $sql="SELECT id,username FROM catalog_users WHERE username='$user' AND password='$pass'";
    $query=mysql_query($sql) or die(mysql_error());

        if(mysql_num_rows($query) == 1)
        {
            $row = mysql_fetch_assoc($query); // mysql_fetch_assoc gets the value for each field in the row
            $_SESSION['id'] = $row['id']; //creates the first session var
            $_SESSION['username'] = $row['username']; // second session var
            $_SESSION['logged'] = true;

            echo '
                <script language="javascript">
                    window.location = "admin1.php";
                </script>";

            ';

        }
        else
       {
            echo '
                <script language="javascript">
                    window.location="admin_wrong.php";    
                </script>
            ';
        }   
}
else
{           
    echo '
        <script language="javascript">
            window.location="admin_wrong.php";    
        </script>
    ';
}
}
?>

admin2.php

<?php
session_start();
include('lib/head.php');


if (isset($_SESSION['logged']) && $_SESSION['logged'] == true) {
    echo "
        This is a secured page, welcome <b>".$_SESSION['username']."</b>
        <br>
        <br>
        <a href='admin1.php'>Back</a>
        <a href='logout.php'>Logout</a>

        ";
    }
else {
    echo "<b>Sorry, you cannot access this page</b>";
}   


?>

更新:<?php session_start()コードの先頭より前のCSSが問題を引き起こしていました

4

1 に答える 1

5

おそらく、ログインコードがhtmlのにあるため、スクリプトがスクリプトの最後にログインしていても、ログインしていないように見えます。

通常、PHPとHTMLを(異なるファイルで)可能な限り分離し、最初にすべてのPHPビジネスロジックを実行してから、すべてのHTMLを出力する必要があります。

于 2012-05-01T16:52:10.223 に答える