【问题标题】:Logout problem /session not destroyed注销问题/会话未销毁
【发布时间】:2010-06-15 08:35:27
【问题描述】:

我在尝试登录时遇到问题。下面是我的登录代码

<?php 
session_start();
include("functions.php");
    connecttodb();

if(!empty($_SESSION['loggedin']) && !empty($_SESSION['username']))
{
    echo "already logged in";
header("refresh:3; url=main.php");

}

if(!empty($_POST['username']) && !empty($_POST['password']))
{
     $username = $_POST['username'];
    $password = $_POST['password'];


     $sql="SELECT * FROM admin WHERE admin_username ='".$username."' AND admin_password= '".$password."'";
     $result=mysql_query($sql) or die(mysql_error());
     echo $sql;

    if(mysql_num_rows($result) == 1)
    {
         $row = mysql_fetch_array($result);
        $acc = $row['account'];

        $_SESSION['username'] = $username;
        $_SESSION['account'] = $acc;
        $_SESSION['loggedin'] = 1;

         echo "<h1>Success</h1>";
        echo "<meta http-equiv='refresh' content='=2;panel.php' />";
    }
    else
    {
         echo "<h1>Error</h1>";
        echo "<p>Please <a href=\"login.php\">click here to try again</a>.</p>";
    }
}
else
{
    ?>



    <form method="post" action="login.php" name="loginform" id="loginform">
    <fieldset>
        <label for="username">Username:</label><input type="text" name="username" id="username" /><br />
        <label for="password">Password:</label><input type="password" name="password" id="password" /><br />
        <input type="submit" name="login" id="login" value="Login" />
    </fieldset>
    </form>

   <?php
}
?>

我的注销文件

<?php
$_SESSION = array(); 
session_unset();
session_destroy();


echo "Logged Out !";
header("Location:login.php");

?>

问题是当我尝试注销时会话没有被破坏。当它重定向到登录页面时,它说我已经登录了。当用户单击注销时,我怎样才能完全销毁会话?

【问题讨论】:

    标签: php session


    【解决方案1】:

    将您的注销更改为以下内容:

    <?php
    session_start(); # NOTE THE SESSION START
    $_SESSION = array(); 
    session_unset();
    session_destroy();
    
    // echo "Logged Out!";
    // Note: Putting echo "Logged Out!" before sending the header could result in a "Headers already sent" warning and won't redirect your page to the login page - pointed out by @Treur - I didn't spot that one.. Thanks...
    header("Location:login.php");
    exit(); # NOTE THE EXIT
    ?>
    

    在处理会话时,每个页面总是需要session_start()

    当使用header()Location 时,请确保您exit() 页面将继续执行。

    【讨论】:

    • 注意:输入 echo "Logged Out !"在发送标头之前可能会导致“标头已发送”警告,并且不会将您的页面重定向到登录页面
    • 是的,好点,他们不会注意到这个错误可能没有 exit();或者可能关闭错误报告。
    【解决方案2】:

    我认为你忘记了 $_SESSION = array(); 之前的 session_start();在您的注销脚本中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多