1

我需要设置 HTTP 身份验证。我迷路了,我研究并找到了验证 $_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_PW'] 的技术和代码,我想我明白这一点。但是我不明白如何设置 PHP_AUTH_USER 和 PHP_AUTH_PW ?我在 $_SERVER 上使用了 print-r 也没有看到?我是以某种方式将这些设置在服务器某处的文件中,还是使用代码进行设置?

我在 Webfaction 托管的共享服务器上。

我意识到这可能不是一个好问题,但如果有人能指出我正确的方向,那就太好了..

4

3 回答 3

2
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}

当页面被调用时,$_SERVER['PHP_AUTH_USER']不设置。所以页面返回HTTP/1.0 401 Unauthorized在浏览器上显示模式的标题。

当浏览器发送带有 ID 和密码的第二个请求时。它发送这个请求:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

PHP_AUTH_USER并且超级全局变量PHP_AUTH_PW是由 PHP 自动设置的。

资料来源:

于 2013-03-29T16:35:12.503 回答
1

这是您需要的所有代码:

$successful = FALSE;

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
{
    $username = $_SERVER['PHP_AUTH_USER'];
    $password = $_SERVER['PHP_AUTH_PW'];

    if ($username == '-- username --' && $password == '-- password --')
    {
        $successful = TRUE;
    }
}

if ( ! $successful)
{
    header('WWW-Authenticate: Basic realm="Secret page"');
    header('HTTP/1.0 401 Unauthorized');
}

它会询问用户名和密码,查看它们是否匹配,如果不匹配 - 再次询问它们。

请注意,根据服务器配置,HTTP 基本身份验证可能不起作用。


ps 你应该用你自己的用户名和密码替换-- username --和。-- password --

于 2013-03-29T16:27:16.737 回答
0

要设置环境变量(又名超全局变量),格式为:
$_SERVER['variable'] = value (or variable);

http://php.net/manual/en/language.variables.superglobals.php - good info on PHP superglobal variables.

于 2013-03-29T16:36:08.357 回答