2011-02-08 28 views
6

Vì một số lý do tôi không thể nhận được Xác thực cơ bản để hoạt động bằng cách sử dụng PHP trên máy chủ của mình. Tôi đang sử dụng mã chính xác từ trang hướng dẫn sử dụng:Xác thực cơ bản bằng PHP cung cấp vòng lặp vô tận

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

Tuy nhiên, khi tôi chạy nó, tôi không bao giờ có thể vượt quá lời nhắc.

Nếu tôi đặt cùng mã này trên máy chủ khác của tôi, nó hoạt động tốt.

Có ai biết điều gì có thể gây ra điều này không? Cả hai máy chủ đều là các ngăn xếp WAMP và Apache đã bật auth_basic_module. Các tệp PHP.ini thực tế giống hệt nhau.

Tôi liếc nhìn các tiêu đề và sau khi tôi nhập tên người dùng/mật khẩu của mình, có tiêu đề "Ủy quyền: Cơ bản XXXXXX" đang được gửi.

+0

thử 'diff' trên hai tệp' php.ini', chỉ trong trường hợp bạn đang thiếu thứ gì đó. Bạn cũng có thể so sánh apache confs quá. – ocodo

+0

Tham khảo: http://www.php.net/manual/en/features.http-auth.php –

Trả lời

9

Điều này phụ thuộc vào giao diện PHP đã sử dụng. Biến môi trường PHP_AUTH_USER chỉ được sử dụng cho mod_php và nếu Apache trợ giúp.

Nếu bạn khởi tạo ủy quyền từ tập lệnh, khi đó bạn phải tìm tiêu đề HTTP_AUTHORIZATION và giải mã và chia nhỏ nó. Xem nhận xét này: http://www.php.net/manual/en/features.http-auth.php#94349

Đối với các thiết lập FastCGI hoặc invexations suexec bạn thậm chí có thể không có tiêu đề đó trong các biến môi trường. Nó được lọc ra như là biện pháp phòng ngừa an ninh. Cách giải quyết thông thường là phải viết lại các tiêu đề bằng cách sử dụng quy tắc .htaccess:

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

Do đó nó trở nên có sẵn với hỗn hợp cụ thể như $_SERVER["HTTP_Authorization"].

+0

Tôi đang đánh dấu câu trả lời của bạn là câu trả lời vì nó cực kỳ hữu ích. Tôi không biết tại sao (có lẽ bạn làm), nhưng biến môi trường HTTP_AUTHORIZATION đã được đổi tên thành REDIRECT_HTTP_AUTHORIZATION. Tôi có thể kiểm tra cho điều đó, đổi tên nó thành HTTP_AUTHORIZATION và sau đó tiếp tục với mã như được hướng dẫn trong bình luận thủ công php bạn đã đăng. – Brandon0

+0

@ Brandon0: Tiền tố 'REDIRECT_' là một đặc điểm khác của biến thể FastCGI của PHP. Nhưng tôi không bao giờ phát hiện ra trong trường hợp nào nó thực hiện điều đó và cài đặt cấu hình nào kích hoạt nó. – mario

+0

@ Brandon0 Tôi gặp vấn đề tương tự nhưng tôi thực sự không thể hiểu được sự khắc phục bạn đã thực hiện để giải quyết nó là gì. Bạn có thể chia sẻ những thay đổi bạn đã thực hiện trong mã không? – DMEM

Các vấn đề liên quan