2011-02-08 24 views
6

किसी कारण से मुझे अपने सर्वर पर PHP का उपयोग करके काम करने के लिए मूल प्रमाणीकरण नहीं मिल सकता है। मैं मैनुअल पेज से सटीक कोड का उपयोग कर रहा हूं:PHP के साथ मूल प्रमाणीकरण एक अंतहीन पाश देता है

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

हालांकि, जब मैं इसे चलाता हूं, तो मैं कभी भी संकेत से परे नहीं जा सकता।

यदि मैं अपने अन्य सर्वर पर यह कोड डालता हूं, तो यह ठीक काम करता है।

क्या किसी को पता है कि इसका कारण क्या हो सकता है? दोनों सर्वर WAMP स्टैक हैं और अपाचे में auth_basic_module सक्षम है। PHP.ini फ़ाइलें व्यावहारिक रूप से समान हैं।

मैंने हेडर पर देखा और अपना उपयोगकर्ता नाम/पासवर्ड दर्ज करने के बाद, "प्रमाणीकरण: मूल XXXXXX" हेडर भेजा जा रहा है।

+0

दो 'php.ini' फ़ाइलों पर' diff' आज़माएं, बस अगर आप कुछ खो रहे हैं। आप apache confs की तुलना भी कर सकते हैं। – ocodo

+0

संदर्भ: http://www.php.net/manual/en/features.http-auth.php –

उत्तर

9

यह प्रयुक्त PHP इंटरफ़ेस पर निर्भर करता है। पर्यावरण परिवर्तनीय PHP_AUTH_USER केवल mod_php के लिए उपयोग किया जाता है और यदि अपाचे ने मदद की है।

यदि आप स्क्रिप्ट से प्राधिकरण प्रारंभ करते हैं, तो आपको HTTP_AUTHORIZATION हेडर ढूंढना होगा, और इसे डीकोड करें और इसे स्वयं विभाजित करें। इस टिप्पणी को देखें: http://www.php.net/manual/en/features.http-auth.php#94349

फास्टसीजीआई सेटअप या सुएक्सैक इनोकेशन के लिए आपके पास उस शीर्षलेख को पर्यावरण चर में मौजूद नहीं हो सकता है। इसे सुरक्षा सावधानी के रूप में फ़िल्टर किया गया है। आम वैकल्पिक हल एक .htaccess नियम का उपयोग कर हेडर के पुनर्लेखन के लिए है:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

इस प्रकार यह $_SERVER["HTTP_Authorization"] के रूप में मिश्रित-केस के साथ उपलब्ध हो जाता है।

+0

मैं आपकी प्रतिक्रिया को उत्तर के रूप में चिह्नित कर रहा हूं क्योंकि यह बेहद सहायक था। मुझे नहीं पता क्यों (शायद आप करते हैं), लेकिन HTTP_AUTHORIZATION पर्यावरण चर का नाम बदलकर REDIRECT_HTTP_AUTHORIZATION कर दिया गया था। मैं इसके लिए जांच कर सकता हूं, इसे HTTP_AUTHORIZATION पर पुनर्नामित करें और फिर आपके द्वारा पोस्ट की गई PHP मैन्युअल टिप्पणी में निर्देशित कोड के साथ जारी रखें। – Brandon0

+0

@ ब्रैंडन 0: 'रेडियरैक' उपसर्ग PHP की फास्टसीजीआई संस्करण की एक और विशिष्टता है। लेकिन मुझे कभी पता नहीं चला कि यह किस परिस्थिति में करता है और कौन सी कॉन्फ़िगरेशन सेटिंग्स इसे ट्रिगर करती है। – mario

+0

@ ब्रैंडन 0 मुझे एक ही समस्या है लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि इसे हल करने के लिए आपने जो फिक्स लागू किया है, वह वास्तव में क्या समझ रहा है। क्या आप कोड में किए गए परिवर्तनों को साझा कर सकते हैं? – DMEM

संबंधित मुद्दे