【问题标题】:HTTP Authentication won't work on localhost Zend WAMP serverHTTP 身份验证在 localhost Zend WAMP 服务器上不起作用
【发布时间】:2012-12-04 21:57:29
【问题描述】:

我一直在研究 Robert Nixon 的 PHP、MySQL、Javascript 和 CSS 第 2 版(O'Reilly 2012)。我已经设法在我的 WAMP 服务器(Zend 服务器)上建立了一个数据库。

这本书随后展示了如何验证用户名和密码。我设法创建了一些带有密码的用户名,这些用户名已成功添加到我的数据库中。我知道,因为我连接到了数据库,读取了 SELECT 查询的结果并将它们回显到浏览器。

当我尝试在此处使用身份验证登录时:

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {....perform database query and compare username/password....}

我的用户名和密码都不起作用。在 Firefox 和 IE 中再次弹出“需要身份验证”窗口。 PHP 代码没有通过 if 语句(我尝试在 if 语句之前和之后立即将输出发送到浏览器),因此输入的用户名和密码似乎没有传递到 PHP 服务器。

我确保 'localhost' 在 Firefox 上得到了专门授权,但仍然没有成功。

欢迎提出任何建议。

加里

【问题讨论】:

  • 你做了什么调试?你看到这两个 $_SERVER 变量中的实际内容了吗?
  • 输入用户名和密码后,再次弹出验证输入窗口。我试图将 $_SERVER 变量的值回显到浏览器(在 if 语句之后),但什么也没出现。然后,我放置了一个 for 循环,将一千行随机文本输出到浏览器,但没有执行,所以似乎“if”语句读取为 false,并且再次显示身份验证框。所以看起来 $_SERVER 变量不包含任何内容。

标签: php http localhost http-authentication zend-server


【解决方案1】:

找到了!我在尝试相同的示例(!)时遇到了同样的问题,并发现当 php 作为 cgi 运行时会出现问题。您可以通过调用 php_sapi_name() 来检测它:如果函数返回 'cgi-fcgi'(这似乎是 Zend 下的默认值),则基本身份验证不起作用。您可以在 Server API (CGI/FastCGI) 下的 phpInfo 中找到相同的信息。

在我的情况下,开发版本也有这个问题,而实际版本没有(网站使用 Apache 2.0 处理程序)。到目前为止,我刚刚添加了一个检查,如果检测到 cgi-fgci 则禁用身份验证(我不需要在 localhost 上进行身份验证),但我当然想找到一个可行的替代方案。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多