注销按钮 php

Posted

技术标签:

【中文标题】注销按钮 php【英文标题】:Logout button 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>

【问题讨论】:

【参考方案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()

以上是关于注销按钮 php的主要内容,如果未能解决你的问题,请参考以下文章

注销按钮上的 PHP 会话销毁

在我单击注销按钮之前,如何在 php 中保持会话? [复制]

当用户登录时显示“注销”按钮,当他不使用 PHP/MySQL 时显示“连接”

注销后的 CodeIgniter 后退按钮

php和mysql中的登录,注销和持续时间?

如何注销单个帐户?