1

我知道注销 http 没有“真正的解决方案”,因为它是无状态的。但是,我需要的只是一个解决方法。我想要实现的是当单击注销链接时,它会重定向到 logout.php 文件。该文件再次调用基本身份验证标头。我想让 php 代码传入一个虚假密码,然后重定向到我的主页,用户将在该主页“注销”。

我意识到他们实际上不会被注销,而是浏览器将尝试使用最新的身份验证凭据,这些凭据将被传入并且不正确,因此使用户使用有效凭据重新登录。

我基本上没有 php 经验,也不知道如何编写错误密码的传递。

任何帮助表示赞赏。

注销.php

<?php
    session_start();
    session_write_close();

    header('HTTP/1.1 401 Access Denied');
    header('WWW-Authenticate: Basic realm="HTTPS File Upload"');
    header('HTTP/1.0 401 Unauthorized');
    header('Location: http://www.homepage.com') 
?>
4

4 回答 4

1

此页面上的示例 #3 可能与您要查找的内容接近。

http://php.net/manual/en/features.http-auth.php

您可以采取的另一种方法是实现 PHP 会话。这是一个很好的基本阅读。

http://phpmaster.com/php-sessions/

编辑 - 如果您添加 PHP 会话,则不需要强制使用无效凭据(是的,您可以同时拥有两者)。即使您拥有的唯一会话变量是布尔值 $_SESSION["IsLoggedIn"]。使用所述变量,您可以将其添加到示例 #3 中的 if 语句中,如下所示,并通过 logout.php 脚本将其从会话中删除。

if (!isset($_SESSION["IsLoggedIn"]) || !isset($_SERVER['PHP_AUTH_USER']) ||
    ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    authenticate();
} else {
    ...
}

并且不要忘记使用 session_start(); 每当您使用 $_SESSION 变量时,都会显示在页面顶部。

于 2013-08-06T16:58:19.880 回答
1

它确实有效:

<?php
if (!isset($_SERVER['PHP_AUTH_USER']) or isset($_POST['logout'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo '<h1>Access Denied!</h1>';
    exit;
} else {
    if(!($_SERVER['PHP_AUTH_USER']=='admin' and md5($_SERVER['PHP_AUTH_PW'])=='d81edf2e48ddddddddd631e374c5932d'))
    {
        header('HTTP/1.0 401 Unauthorized');
        exit;
    }
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>


<html>
<head>
</head>
<body>
<form method="POST">
<button name="logout" type="submit">Log Out</button>
</form>

</body>
</html>
于 2016-02-21T10:28:41.280 回答
0

基本 http 身份验证通过在每个请求中传递用户名/密码来工作。浏览器通常存储凭据并在每个请求中传递它们,因此您的解决方案不能是服务器端的,如果可能的话,您必须想办法告诉浏览器忘记凭据。

于 2013-08-06T16:51:14.537 回答
0

将http响应代码设置为:

401

响应标头必须包括:

WWW-Authenticate : Basic

现在将提示用户在刷新时登录。

PS Chromium 浏览器将提示用户仅从 401 代码登录,因此我将使用 IE 进行测试。此外,私人浏览模式是你的朋友。

于 2016-04-23T07:25:34.383 回答