2013-10-22 222 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

我在這個答案中看不到任何東西,它與所問的問題甚至有絲毫的相關性...... –