我希望设置一个功能,当有人发送“注销”请求时,它会自动跳转到一个页面,显示“注销成功”。如果客户尝试按返回按钮或进入受限区域,它将再次要求HTTP身份验证。
我目前的做法是:
example.com/restricted/index.php:
如果访问example.com/restricted/index.php?logout,则用户成功访问example.com/logout.php。但是,当用户尝试返回时,会发生一些随机的事情,有时它会要求HTTP身份验证两次(???),有时它会在循环中不断地要求身份验证(?),有时它会让我立即返回,好像我从未注销过。
我对会话的工作原理还不太了解,但我的理解是:如果/当人员得到验证,它会在其会话中存储一个名为login的变量,其值为true...如果它每次得到一个带有logout的GET请求,那么它将删除该会话变量并返回到logout.php...为什么当我点击返回到索引时,它会让我回来而不要求身份验证,当session[login]明显没有设置时。
欢迎改进此PHP代码。我知道我不应该使用HTTP Basic并应该整合SQL,但这是一个临时解决方案。
编辑:如果包括具有说明的示例,则将接受具有MySQL的解决方案。我没有MySQL或PHP数据库知识(尚未)。
我目前的做法是:
example.com/restricted/index.php:
<?php
session_start();
if(isset($_GET['logout']))
{
unset($_SESSION["login"]);
header("location: ../logout.php");
exit;
}
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || !isset($_SESSION["login"]))
{
header("HTTP/1.0 401 Unauthorized");
header("WWW-authenticate: Basic realm=\"Tets\"");
header("Content-type: text/html");
$_SESSION["login"] = true;
// Print HTML that a password is required
exit;
}
?>
// The rest of the page is then displayed like normal
如果访问example.com/restricted/index.php?logout,则用户成功访问example.com/logout.php。但是,当用户尝试返回时,会发生一些随机的事情,有时它会要求HTTP身份验证两次(???),有时它会在循环中不断地要求身份验证(?),有时它会让我立即返回,好像我从未注销过。
我对会话的工作原理还不太了解,但我的理解是:如果/当人员得到验证,它会在其会话中存储一个名为login的变量,其值为true...如果它每次得到一个带有logout的GET请求,那么它将删除该会话变量并返回到logout.php...为什么当我点击返回到索引时,它会让我回来而不要求身份验证,当session[login]明显没有设置时。
欢迎改进此PHP代码。我知道我不应该使用HTTP Basic并应该整合SQL,但这是一个临时解决方案。
编辑:如果包括具有说明的示例,则将接受具有MySQL的解决方案。我没有MySQL或PHP数据库知识(尚未)。