注销按钮 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 中保持会话? [复制]