首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP登录和注销在同一页面上导致错误

问PHP登录和注销在同一页面上导致错误
EN

Stack Overflow用户
提问于 2015-07-06 23:15:41
回答 3查看 768关注 0票数 0

我正在制作一个网页,我正在尝试制作它,使页面在您未登录时显示登录字段,并在您登录时显示注销按钮。登录和注销本身工作正常,因为我首先在单独的网页上使用它们,但是现在,在同一个页面上,一旦你登录,你就不能再注销了,我也不知道为什么,我以为这可能与$_POST有关,但经过一些测试后,似乎与它无关。

在同一网页上显示的代码:

代码语言:javascript
复制
function DisplayLogin(){

    if (isLoggedIn()){
        DisplayLoggedIn();
    } else {
        DisplayLoginForm();
    }
}

function DisplayLoginForm(){
    echo "<div>";
    include_once 'Login.php';
    echo "</div>";      
}

function DisplayLoggedIn(){
    echo "<div>";
    include_once 'Logout.php';
    echo "</div>";  
}

用于登录的代码:

代码语言:javascript
复制
<?PHP
 function Login($UserName, $Password){
        if (isPasswordCorrect($UserName, $Password)) {
            sec_session_start();
            $_SESSION['LoggedIn'] = true;
            $_SESSION['UserName'] = $UserName;
            $_SESSION['UserID'] = getUserID($UserName);
            $headerstring = determineHeader();
            $_SESSION['TimeStamp'] = time();
            header($headerstring);
            unset($_SESSION['LoginURL']);
        } else {
            echo 'Username or Password incorrect';
        }
    }
  if (isset($_POST["Login"])) {
        Login($_POST['UserName'], $_POST['Password']);
    }

?>

<form method="POST">
    <input type="text" name="UserName">
    <input type="password" name="Password">
    <input type="submit" name="Login" value="Log In">
</form>

注销代码:

代码语言:javascript
复制
<?PHP
if (isset($_POST['logout'])) {
        session_unset();
        session_destroy();
        //header("Refresh:0");
    }

?>
<form method="post">
    <input type="submit" name="logout" value="Logout">
</form>

注意:代码语法不是完全正确的,因为我删除了一些不重要的东西。

编辑:我很确定在按下注销按钮后,页面会让用户重新登录,但我不知道为什么,也不知道如何登录。

编辑: isLoggedIn代码:

代码语言:javascript
复制
function isLoggedIn(){
if (session_status() == PHP_SESSION_NONE) {
    sec_session_start();
}
if (isset($_SESSION['LoggedIn']) && $_SESSION['LoggedIn']) {
    return true;
} else {
    return false;

}
}

编辑:密码代码:

代码语言:javascript
复制
function isPasswordCorrect($UserName, $Password){
        $mysqli = connectToDatabase();
        $stmt = $mysqli->prepare("SELECT UserPassword, UserID FROM users  WHERE UserName=?");
        $stmt->bindParam("1", $UserName);
        $stmt->execute();

        $row = $stmt->fetch();
        return (password_verify($Password, $row['UserPassword']));
    }

编辑:将"exit;“放在DisplayLogin()函数的if和else部分的和处可以解决这个问题,但这不是一个可接受的解决方案,因为这会阻止页面加载的其余部分。

EN

回答 3

Stack Overflow用户

发布于 2015-07-06 23:26:33

代码语言:javascript
复制
if (isset($_POST['logout'])) {
    sec_session_start();
    session_unset();
    session_destroy();
    //header("Refresh:0");
}

您错过了在取消设置安全会话之前启动它。

票数 0
EN

Stack Overflow用户

发布于 2015-07-06 23:34:34

代码语言:javascript
复制
<?PHP
if (isset($_POST['logout'])) {
    unset($_SESSION['LoggedIn']);
    unset($_SESSION['UserName']);
    unset($_SESSION['UserID']);
    unset($_SESSION['TimeStamp']);
    session_unset();
    session_destroy();
    //header("Refresh:0");
}

?>

尝试取消设置所有会话。

票数 0
EN

Stack Overflow用户

发布于 2015-07-07 00:06:41

我解决了,但我不知道为什么它以前不起作用。在我调用displayLogin()的页面中,我在它之后调用了isLoggedIn(),出于某种原因,这会让会话保持注销前的状态,但是通过将isLoggedIn()的结果存储在一个变量中,并在调用displayLogin()之前使用该变量,一切都会正常工作。

我只是不知道为什么它以前不能工作,有人能给我解释一下吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31249492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档