【问题标题】:Logout button php注销按钮 php
【发布时间】:2012-08-25 22:09:02
【问题描述】:

我有这个代码,需要代码来添加一个注销按钮,任何人都可以写出一个注销用户的注销按钮的代码,我读了一些关于销毁会话的东西,但不知道如何编写代码出,谢谢!

<?php
    include 'connection.php';
    //start of checking if user is logged in code
    if (!valid_credentials) {
    header('Location: login.php');
    exit();
    }

$_SESSION['user'] = 'username';


if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}
    //end of logged in code and starting a session

$query = "SELECT * FROM people";
$result = mysql_query($query);
While($person = mysql_fetch_array($result)) {
    echo "<h3>" . $person['Name'] . "</h3>";
    echo "<p>" . $person['Description'] . "</p>";
    echo "<a href=\"modify.php?id=" . $person['ID']. "\">Modify User</a>";
    echo "<span> </span>";
    echo "<a href=\"delete.php?id=" . $person['ID']. "\">Delete User</a>";
}
?>
<h1>Create a User</h1>
<form action="create.php" method="post">
    Name<input type ="text" name="inputName" value="" /><br />
    Description<input type ="text" name="inputDesc" value="" />
    <br />
    <input type="submit" name="submit" />
</form>

【问题讨论】:

    标签: php logout


    【解决方案1】:

    放置一个链接而不是按钮,然后将其导航到另一个页面

    <a href="logout.php">Logout</a>
    

    然后在logout.php页面中,使用

    session_start();
    session_destroy();
    header('Location: login.php');
    exit;
    

    【讨论】:

    • session_unset 来自$_SESSION 存在之前已弃用的会话 API。使用unset,或者根本不调用它,因为你正在破坏会话。
    • 这太疯狂了。注销按钮应该是 POST,而不是 GET。
    • @Nakilon 不必要时使事情复杂化的经典案例。您是否看到通过锚链接传递的任何数据?当一切都已经在服务器端完成时,绝对不需要进行 POST。
    • @asprin,它只是 HTTP 标准——如果您在服务器上更改 smth(使会话无效),它应该是 POST。想象一下,如果我在我的 SO 配置文件中编辑图像 src="" 以不指向 projecteuler 站点,而是指向“/logout”。当您查看我的个人资料时,您将被注销。注销按钮应该是 POST 是最基本的。
    • @Nakilon 通过这种逻辑,我也可以很容易地修改 post 变量。如果有人足够熟练地知道如何更改 GET,那么他肯定也知道如何为 POST 做同样的事情。
    【解决方案2】:

    当你想完全销毁一个会话时,你需要做的不仅仅是

    session_destroy();
    

    首先,您应该取消设置所有会话变量。然后你应该销毁会话,然后关闭会话的写入。这可以通过以下方式完成:

    <?php
    session_start();
    unset($_SESSION);
    session_destroy();
    session_write_close();
    header('Location: /');
    die;
    ?>
    

    您希望有一个单独的注销脚本的原因是您不会在页面上意外执行它。因此,创建一个指向您的注销脚本的链接,然后标题将重定向到您网站的根目录。

    编辑:

    您需要从靠近脚本顶部的退出代码中删除 ()。它应该只是

    exit;
    

    【讨论】:

    • 为什么重定向之后还有额外的死?
    • @ina 好问题。 die 出现的原因是,如果您想在 header 重定向后继续,它 die 会阻止代码在重定向后执行。在这种情况下,它并不是真正需要的,但如果您打算在重定向后做更多事情,这是一个很好的做法。
    • 使用 $_SESSION=[];, unset($_SESSION) 将使您无法重新创建会话。
    • @wolfrevo 最好使用$_SESSION = array();
    • 最后需要die还是exit()
    猜你喜欢
    • 2016-01-21
    • 2012-02-18
    • 2021-10-03
    • 2014-08-14
    • 2017-10-08
    • 2012-03-14
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多