2013-10-22 184 views
0

试图使用流行的示例来验证我的PHP网页上的用户。我的网站托管在公共窗口.net服务器(是的... PHP也在运行)我运行phpinfo来查看服务器设置,看起来像允许$_SERVER['PHP_AUTH_USER'],我没有阅读过有关PHP的服务器有时需要CGI而不是模块。即使在输入用户名/密码组合后,我仍然得到登录提示,永远不会过去吗?在IISPHP身份验证页面

<?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>"; 
} 
?> 

phpinfo

+7

你能在问题将链接添加到“大众榜样”? – IMSoP

+0

代码提供... – BarclayVision

+0

这里是链接:http://php.net/manual/en/features.http-auth.php – BarclayVision

回答

1

PHP不接受用户名和密码是一种常见的场景中,可以很容易地围绕工作:使用Authorization头。

这仅仅是从内存,认为这是一个起点

if (!isset($_SERVER['PHP_AUTH_USER'])) 
    if (isset($_SERVER['HTTP_AUTHORIZATION'])) { 
    $auth=explode(' ',$_SERVER['HTTP_AUTHORIZATION']); 
    if ((strtoupper($auth[0])=='BASIC') || (sizeof($auth)==2)) { 
     [email protected]_decode($auth[1]); 
     if ($auth) { 
     $auth=explode(':',$auth,2); 
     if (sizeof($auth)==2) { 
      $_SERVER['AUTH_TYPE']='Basic'; 
      $_SERVER['PHP_AUTH_USER']=$auth[0]; 
      $_SERVER['PHP_AUTH_PW']=$auth[1]; 
     } 
     } 
    } 
    } 
//Now proceed as normal 
+0

在'$ auth = @ base64_decode($ auth [1])时出错'将$$固定为|| – BarclayVision

+0

不知道这是一个问题或没有,但显示的phpinfo _SERVER [ “AUTH_TYPE”] \t没有价值 _ SERVER [ “AUTH_PASSWORD”] \t没有价值 _ SERVER [ “AUTH_USER”] .....不PHP_AUTH_USER ??? – BarclayVision

+0

1.修正'$$'与'''错字,谢谢。 2.我没有在第一个版本中设置'$ _SERVER [“AUTH_TYPE”]',但现在添加了。 3.尝试回显这些值,如果它们是空的,则通过代码进行查看,并查看未采取分支的位置。现在无法访问Windows机器。 –

0

我建议你尝试一个更基本的方法,并添加会话变量,当你登录为前

当你登录

$_SESSION['logged']="true"; 
您的网页上

if($_SESSION['logged'] == "true") 
{ 
//load your page 
}else{ 
//redirect him/her to somewhere 

,并在您注销

session_start(); 
session_destroy(); 
+0

我在这个答案中看不到任何东西,它与所问的问题甚至有丝毫的相关性...... –