Xác thực màu đỏ thẫm php. HTTP Cài đặt bảo vệ trên một trang bằng MySQL và PHP. Bây giờ hãy tạo các tập lệnh chính để làm việc tiếp theo

Mới hôm qua tôi đã quyết định bắt đầu phát triển tài khoản cá nhân cho một trang web không tên. Tôi có một câu hỏi về hình thức của biểu mẫu ủy quyền; thành thật mà nói, tôi không muốn thiết kế biểu mẫu, tạo chú giải công cụ và nói chung là chú ý nhiều đến biểu mẫu. Tôi dại dột lao đi tìm giải pháp làm sẵn và thấy đủ hình thức vô vị. Tôi đã nghĩ đến việc tìm một số thành phần làm sẵn, một phần mở rộng làm sẵn, nhưng phần lớn chúng làm tôi thất vọng. Lang thang trên các diễn đàn, mình thấy chơi thẻ HTTP Authentication: Basic rất thú vị. Tôi đã đọc hướng dẫn sử dụng, trước đây tôi chưa hiểu rõ về phương pháp này. Sau đó, các vấn đề bắt đầu.

Không có nơi nào để đi, vì vậy tôi lùng sục trên mạng để tìm các trang web có thể tạo biểu mẫu, mã và kiểu. Những nỗ lực của tôi để làm cho công việc của tôi dễ dàng hơn đều vô ích. Giải pháp rất nhỏ, tôi bắt đầu giải quyết vấn đề. Có lần tôi đã cố gắng đưa ra giải pháp bằng cách sử dụng .htaccess và tôi đã tìm thấy giải pháp này.

RewriteCond %(HTTP:Authorization) ^Basic.* RewriteRule (.*) index.php?authorization=%(HTTP:Authorization)

Than ôi, tôi đang gặp vấn đề với Joomla, mọi thứ đều ổn trong .htaccess, nhưng tôi đang ở đây với mã của mình. Sau khi dành thời gian thử nhiều cách kết hợp khác nhau, tôi đồng ý rằng tôi sẽ không viết lại .htaccess. Ngay từ đầu code đã rất thô sơ, thô thiển đến mức tôi chỉ sao chép và dán nó.

Nó hoạt động rất tốt, nhưng mục tiêu của tôi là triển khai ủy quyền bằng cách sử dụng các từ mã hiện có trong bảng.

Nó hoạt động, các giá trị thay đổi, phiên được tạo. Tuyệt vời, nhưng trong trường hợp nhấp vào hủy, các giá trị Họ không quan tâm đến việc bạn đã hủy, sau khi làm mới trang, họ quay lại vị trí của mình. Tôi quyết định rằng tôi nên giải quyết vấn đề này thông qua unset . Tôi đã thêm một dòng.

If($res = $db->setQuery($query)->loadAssoc()) ( $session->set("user", $res); ) else ( unset($_SERVER["PHP_AUTH_USER"], $_SERVER ["PHP_AUTH_PW"]); tiêu đề("WWW-Xác thực: Vương quốc cơ bản="Vương quốc của tôi""); tiêu đề("HTTP/1.0 401 trái phép"); )

Tôi đã cố gắng đối phó với những biến động này, nhưng tôi ngày càng đi sâu hơn vào hư không. Tôi cũng đã cố gắng kiểm tra sự tồn tại của phiên nhưng vô ích. Ngoài ra, tôi cần phải kết thúc buổi học, điều mà theo các thành viên diễn đàn là khó có thể thực hiện được. Tôi đã hiểu rõ sự thật về việc sử dụng địa chỉ như đăng nhập :pass@locahost/. Tuyệt vời, các biến đã thay đổi $_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]. Than ôi, đây không phải là quyết định cuối cùng của tôi, vì sau khi kết thúc buổi học $_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"] tiếp tục biểu diễn. Tương tự như sau khi buộc $session->set("user", null). Tôi tức giận tột độ, nhưng tôi biết rằng tôi sẽ không tha thứ cho mình nếu cho phép mình lùi bước. Tôi đã viết một điều kiện riêng để kiểm tra đăng xuất.

If($_SERVER["PHP_AUTH_USER"]=="đăng xuất")( $session->set("user", null); header("Làm mới: 0;URL="); ) if(!isset($_SERVER[ "PHP_AUTH_PW"])) ( header("WWW-Authenticate: Basic Realm="My Realm""); header("HTTP/1.0 401 Unauthorized"); ) else ( //Nếu tìm thấy từ mã phù hợp, hãy tạo phiên if ($session->get("user") === null) ( $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select("*") ; $query->from("#__beda_users"); $query->where("codeword = ".$query->quote($_SERVER["PHP_AUTH_PW"])); if($res = $db->setQuery ( $query)->loadAssoc()) ( $session->set("user", $res); ) else ( unset($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]); tiêu đề(" WWW -Xác thực: Vương quốc cơ bản="My Realm""); header("HTTP/1.0 401 Unauthorized"); ) ) else ( //Chúng tôi muốn đến đây ) )

Tuy nhiên, điều kiện đã hoạt động sau khi tải lại trang, khi một cửa sổ xuất hiện yêu cầu bạn nhập tên tài khoảnmật khẩu, nó chấp nhận nhưng sau khi tải lại trang thì nó nhắc mình nhập lại mật khẩu, bấm “Hủy”, $_SERVER["PHP_AUTH_USER"] sẽ đăng xuất. Tôi sẽ cập nhật các giá trị và anh ấy sẽ chỉ định chúng. Và nếu tôi nhấp vào hủy, nó sẽ trả về các giá trị trước đó. Rắc rối.

Cuối cùng, giải pháp cuối cùng trông như thế này.

$session = JFactory::getSession(); hàm http_auth($session)( $session->set("user", null); unset($_SERVER["PHP_AUTH_PW"], $_SERVER["PHP_AUTH_USER"]); header("WWW-Authenticate: Basic field=" Auth""); header("HTTP/1.0 401 Unauthorized"); ) if($_SERVER["PHP_AUTH_USER"]=="logout")( $session->set("user", null); header("Làm mới : 0;URL="); ) if($session->get("user") === null)( if(!isset($_SERVER["PHP_AUTH_PW"]))( http_auth($session); ) else ( $pw = $_SERVER["PHP_AUTH_PW"]; $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select("*"); $query->from ("#__beda_users"); $query->where("codeword = ".$query->quote($pw)); if($res = $db->setQuery($query)->loadAssoc())( $session->set("user", $res); ) else ( http_auth($session); ) ) ) else ( if(!isset($_SERVER["PHP_AUTH_PW"]))( http_auth($session); ) )

Có thể sử dụng hàm header() để gửi tin nhắn "Yêu cầu xác thực" trình duyệt, buộc nó hiển thị một cửa sổ để nhập thông tin đăng nhập và mật khẩu của bạn. Sau khi người dùng điền thông tin đăng nhập và mật khẩu, liên kết chứa tập lệnh PHP sẽ được gọi lại với các biến được xác định trước PHP_AUTH_USER , PHP_AUTH_PW và AUTH_TYPE được đặt thành thông tin đăng nhập, mật khẩu và loại xác thực tương ứng. Các biến được xác định trước này được lưu trữ trong mảng $_SERVER và $HTTP_SERVER_VARS. Cả hai loại đều được hỗ trợ: "Cơ bản" và "Thông báo" (kể từ PHP 5.1.0). Xem hàm header() để biết thêm chi tiết.

Ví dụ về đoạn tập lệnh buộc khách hàng phải đăng nhập để xem trang:

Ví dụ số 1 Ví dụ xác thực HTTP cơ bản

Ví dụ #2 Ví dụ về xác thực HTTP tóm tắt

Đây là một ví dụ triển khai tập lệnh xác thực HTTP Digest đơn giản. Để biết chi tiết, xem » RFC 2617.