0

我对php编码有点陌生。我正在尝试阅读一本涵盖 HTTP 身份验证主题的书中的一章。

但是,当我在本地 WAMP 服务器上运行此代码时,即使我已正确填写表格,该框仍会再次弹出。

<?php
$username = 'admin';
$password = 'letmein';

if (isset($_SERVER['PHP_AUTH_USER']) &&
    isset($_SERVER['PHP_AUTH_PW']))
{
    if ($_SERVER['PHP_AUTH_USER'] == $username &&
        $_SERVER['PHP_AUTH_PW']   == $password)
        echo "You are now logged in";
    else die("Invalid username / password combination");
}
else
{
    header('WWW-Authenticate: Basic realm="Restricted Section');
    header('HTTP/1.0 401 Unauthorized');
    die ("Please enter your username and password");
}
?>

那么我应该怎么做才能让浏览器接受我的答案呢?

书中有提示:

现代浏览器的安全性变得越来越严格,并且已经到了一个地步,除非您更改浏览器的设置,否则您可能无法轻松地在本地文件系统上测试 HTTP 身份验证。这是为了保护您免受可能从 Internet 下载的潜在恶意文件的侵害(因为本地文件通常会带来更大的安全风险)。相反,如果您希望编写使用这种身份验证类型的代码,这是您可能更喜欢使用 Internet 连接在远程服务器上执行测试的一个实例。

那么如何在远程服务器上测试我的 php 脚本呢?或者我可以更改自己的设置以允许我使用此功能吗?

4

1 回答 1

0

这种说法是无稽之谈;只要您使用 Web 服务器和 URL like http://localhost/...and not访问文件file:///...,就没有显着差异。您不需要“远程”服务器来编写代码。

这种情况下的问题很可能是Web 服务器负责处理身份验证,而您的 PHP 脚本甚至根本不涉及。您可以通过更改值来确认这一点,realm并查看它是否对浏览器弹出窗口有任何影响。

否则,var_dump($_SERVER)请确认您收到的值。

于 2013-05-27T12:41:32.280 回答