cuốn sách gpt4 ai đã làm

Toán tử logic PHP "&&" và "||" khi xây dựng các hàm an toàn đơn giản

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 00:09:30 27 4
mua khóa gpt4 Nike

Một vài ngày trước, tôi đã bắt đầu triển khai một tính năng bảo mật đơn giản trong dự án của mình để ngăn người dùng xem những khách hàng mà người dùng khác đã thêm vào cơ sở dữ liệu. Khi làm điều này, tôi cảm thấy bối rối vì nhận ra rằng các toán tử logic tiêu chuẩn hoạt động theo một cách kỳ lạ.

Đây là mã ban đầu tôi đã viết:

if($current_user_id != $session_user_id || access_level($session_user_id) != 3) {
header('Vị trí: logout.php');
ra();
}

Điều này có nghĩa là nếu bạn cố gắng xem một khách hàng lưu trữ mà bạn không sở hữu hoặc cấp truy cập của bạn không phải là 3 (Quản trị viên), thì bạn sẽ bị đăng xuất. Nó sẽ hoạt động theo điều này:

http://www.w3schools.com/php/php_operators.asp

họ nói || có nghĩa là "đúng nếu điều kiện 1 hoặc điều kiện 2 là đúng", vì vậy nếu bất kỳ điều kiện nào không thất bại thì điều kiện đó sẽ cho phép truy cập. Tất nhiên là không, tập lệnh hoạt động như thể chỉ có điều kiện đầu tiên được viết, có nghĩa là nếu bạn là quản trị viên, cấp truy cập của bạn là 3 và bạn đang xem thứ gì đó không phải ứng dụng khách của mình - bạn sẽ vẫn đăng xuất.

Đây là sửa đổi nhỏ đã bắt đầu hoạt động:

if($current_user_id != $session_user_id && access_level($session_user_id) != 3) {
header('Vị trí: logout.php');
ra();
}

chuyển sang && Sau đó, nó có nghĩa là "đúng nếu điều kiện 1 và điều kiện 2 đều đúng", nó bắt đầu hoạt động tốt, điều đó có nghĩa là bạn có thể không phải là chủ sở hữu của khách hàng nhưng nếu bạn là quản trị viên, bạn sẽ được phép truy cập chứ không phải đăng xuất.

Tôi e rằng sự hiểu biết của tôi ở điểm này đã ngược lại, có ai có thể giải thích tại sao nó có vẻ phi logic không? Chính xác thì nó hoạt động như thế nào? Cảm ơn bạn trước.

câu trả lời hay nhất

Logic của bạn là người dùng sẽ được phép truy cập nếu:

  • Họ là chủ sở hữu hoặc
  • họ là quản trị viên

Theo logic này, bạn có thể xây dựng câu lệnh này:

if( $user == $owner || access_level($user) == 3) {
// cho phép truy cập
}

Nhưng bạn đang sử dụng vị trí tiêu cực tức là. Nếu họ không phải là chủ sở hữu cũng như quản trị viên thì không được phép truy cập. Điều này có nghĩa là bạn phải phủ định toàn bộ nếu như tuyên bố.

Kiểm tra ||&& Bảng chân lý của:

ABA||B A&&B
0 0 0 0
0 1 1 0
1 0 1 0
1 1 1 1

Từ đây có thể thấy rằng để có đượcA||BTừ trái nghĩa với , chúng ta cần!A && !B:

AB !A !BA||B !A&&!B
0 0 1 1 0 1
0 1 1 0 1 0
1 0 0 1 1 0
1 1 0 0 1 0

Vì vậy, để viết mã này, bạn cần làm như sau:

if( !($user == $owner) && !(access_level($user) == 3) ) { /* từ chối quyền truy cập */ }

Tất nhiên nó có thể được viết là:

if( $user != $owner && access_level($user) != 3) { /* từ chối quyền truy cập */ }

Về các toán tử logic PHP "&&" và "||" khi xây dựng các hàm an toàn đơn giản, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/18581507/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress