【问题标题】:PHP - can't logout user using $_SESSION globalPHP - 无法使用 $_SESSION 全局注销用户
【发布时间】:2018-10-16 09:22:35
【问题描述】:

我已经被这个问题困扰了一天多,我希望这里有人可以帮助我。我知道我不是第一个提出关于在 PHP 中使用会话登录/注销的问题,但我发现的其他答案似乎对我没有用。

目前,我正在为我的同事和我正在制作的网站编写服务器端脚本。该网站应该有一个管理仪表板,管理员可以在其中看到一些不错的数据,这些数据对网站的其他访问者是禁止的。因此,我尝试使用会话构建登录/注销系统,这是我开始 Web 开发以来第一次这样做。

问题是,虽然登录似乎可以正常工作,但注销根本不起作用。无论我尝试什么, $_SESSION['user'] 永远不会被破坏,并且始终与管理员用户名相同。这里有人知道我做错了什么吗?

我将发布我的 login.php、logout.php 和我用来调用它们的 jQuery ajax 函数。如果回答问题很重要:该网站当前将所有路由引导到 index.php,其中根据路由显示不同的视图。

我们将不胜感激!

login.php

session_start();
if ($_POST) {
    $nameInput = $_POST['usernameLogin'];
    $passwordInput = $_POST['passwordLogin'];
    $DBrow = dbCompare("adminDash", "user", $nameInput);
    if ($DBrow != NULL) {
        $hashPass = $DBrow['pass'];
        $passCheck = password_verify($passwordInput, $hashPass);
        if ($passCheck == TRUE) {
            $_SESSION['user'] = $DBrow['user'];
            header("Location: ./dashboard");
        }  
    }
    else {
        return 0;
    }
}

logout.php

session_start();
if ($_POST) {
    unset($_SESSION['user']);
    session_destroy();

    if(session_destroy()) {
        header("Location: ./");
    }
}

jQuery Ajax 调用

function logIn() {
$.ajax({
    method: 'POST',
    data: {
        usernameLogin: document.getElementById("usernameLogin").value,
        passwordLogin: document.getElementById("passwordLogin").value
    },
    url: '/app/dataAccess/login.php',
    success: function(response){
        if (response == 0)    {
            alert("Uw gebruikersnaam en/of wachtoord komen niet overeen. Probeer het nog een keer of herstel uw wachtwoord met onderstaande knop.")
        }
    },
    error: function(){
        alert("Er ging iets mis met het verzenden van uw data. Neem contact op met uw systeembeheerder.")
    }
})
}

function logOut() {
$.ajax({
    method: 'POST',
    url: '/app/dataAccess/logout.php',
    success: function (response) {
        alert("succes")
    },
    error: function(){
        alert("error")
    }
  })
}

用于登录/退出的引导模式

<div class="modal backgroundPijl form-horizontal text-center" id="myModal">
<div class="modal-dialog">
    <div class="modal-content">
    <!-- Modal Header -->
    <div class="modal-header">
        <h5 class="col-12 modal-title text-center">Admin login</h5>
    </div>
    <!-- Modal body -->
    <?php if ($_SESSION['user']) : ?> 
    <div class="modal-footer">
        <a type="button" id="loginButton" class="btn btn-danger mr-auto" onclick="logOut()" href="/home">Logout</a>
        <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
    </div>
    <?php else : ?>
    <div class="modal-body">
        <div class="form-group">
            <label for="usernameLogin">Gebruikersnaam</label>
            <input id="usernameLogin" name="usernameLogin" class="form-control">  
        </div>
        <div class="form-group">
            <label for="passwordLogin">Wachtwoord</label>
            <input id="passwordLogin" type="password" name="passwordLogin" class="form-control">  
        </div>
    </div>
    <!-- Modal footer -->
    <div class="modal-footer">
        <button type="button" id="loginButton" class="btn btn-danger mr-auto" onclick="validateLogin()" href="/dashboard">Login</button>
        <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-danger mr-auto ml-auto">Wachtwoord vergeten?</button>
    </div>
    <?php endif; ?>
    </div>
</div>

【问题讨论】:

  • 你的第二个 session_destroy() 在 then if()... 将运行为 false,导致第一个销毁它
  • 感谢您对 Freddy 的评论,但删除 if 语句中的第二个 session destroy 似乎并没有改变任何东西

标签: php session login


【解决方案1】:

尝试其他解决方案

logout.php 中编写下面的代码并且它的工作。

session_start();
unset($_SESSION['user']); 
exit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2013-03-08
    • 2017-03-02
    • 2014-11-16
    • 2022-12-14
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多