php - 如何在 PHP 中使用基本 HTTP 身份验证?

标签 php authentication http-authentication basic-authentication server-variables

我正在尝试使用 Basic HTTP Authentication并遵循 PHP 手册页上的示例。但这对我不起作用。似乎未设置变量 $_SERVER['PHP_AUTH_USER']。当用户尝试登录时,系统会提示用户使用新的登录对话框。服务器运行的是 PHP 5.3.3,我已尝试使用 Google Chrome 和 Internet Explorer。

这是我使用的简单示例:

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="Jonas Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'User pressed Cancel';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as you password.</p>";
}
?>

怎么了?如何在 PHP 中使用基本 HTTP 身份验证?

最佳答案

试试这个:

<?php
    /*
    ** Define a couple of functions for
    ** starting and ending an HTML document
    */
    function startPage()
    {
        print("<html>\n");
        print("<head>\n");
        print("<title>Listing 24-1</title>\n");
        print("</head>\n");
        print("<body>\n");
    }

    function endPage()
    {
        print("</body>\n");
        print("</html>\n");
    }
    /*
    ** test for username/password
    */
    if( ( isset($_SERVER['PHP_AUTH_USER'] ) && ( $_SERVER['PHP_AUTH_USER'] == "leon" ) ) AND
      ( isset($_SERVER['PHP_AUTH_PW'] ) && ( $_SERVER['PHP_AUTH_PW'] == "secret" )) )
    {
        startPage();

        print("You have logged in successfully!<br>\n");

        endPage();
    }
    else
    {
        //Send headers to cause a browser to request
        //username and password from user
        header("WWW-Authenticate: " .
            "Basic realm=\"Leon's Protected Area\"");
        header("HTTP/1.0 401 Unauthorized");

        //Show failure text, which browsers usually
        //show only after several failed attempts
        print("This page is protected by HTTP " .
            "Authentication.<br>\nUse <b>leon</b> " .
            "for the username, and <b>secret</b> " .
            "for the password.<br>\n");
    }
?>

关于php - 如何在 PHP 中使用基本 HTTP 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4150507/

相关文章:

ruby-on-rails - 如何使用可选的 omniauth token 作为身份验证 token 来设计 http 身份验证

php - 如何在 PHP 中使用 AJAX 获取选中的单选按钮值?

php - 如何修复 Laravel 8 测试中的 "419 - Page expired"错误?

php - session 变量未从登录脚本传递

asp.net - 启用了slideExpiration的FormsAuthentication不会在每个请求中返回cookie。

ios - 如何检测来自 UIWebView 的身份验证质询?

php - 两个日期相隔多少天?

php - 使用 ActiveRecord 的 Yii2 查询生成器

c# - 任何可用插件都不支持身份验证方法 'caching_sha2_password'

php - IIS FastCGI 上的 PHP 是否可以进行 HTTP 身份验证?