数日前、他のユーザーがデータベースに追加した顧客をユーザーが表示できないようにするために、プロジェクトに簡単なセキュリティ機能の実装を開始しました。これを行っているとき、標準の論理演算子が奇妙な方法で動作することに気付いたので、混乱しました。
これは私が最初に書いたコードです:
if($current_user_id != $session_user_id || access_level($session_user_id) != 3) {
header('Location: logout.php');
exit();
}
これは、表示しようとしている保存された顧客があなたに属していない場合、またはアクセス レベルが 3 (管理者) でない場合、ログアウトされることを意味します。これに従って動作するはずです:
http://www.w3schools.com/php/php_operators.asp
「条件1または条件2のいずれかが真の場合に真」という||
意味なので、いずれかの条件が満たされない場合はアクセスを許可する必要があります。もちろんそうではありません。スクリプトは最初の条件のみが記述されているように動作します。つまり、管理者であり、アクセス レベルが 3 で、顧客ではなく表示している場合、ログアウトされます。
これは、機能し始めたマイナーな変更です。
if($current_user_id != $session_user_id && access_level($session_user_id) != 3) {
header('Location: logout.php');
exit();
}
&&
「条件 1 と条件 2 の両方が true の場合に true」を意味するように切り替えた後、正しく機能し始めました。つまり、顧客の所有者ではない可能性がありますが、管理者である場合は、アクセスが許可され、ログアウトされません。
この時点で、私はそれを逆に理解しているのではないかと心配しています.誰かがそれが論理的に見えない理由を説明できますか? そして、それはどのように正確に機能しますか?前もって感謝します。