正如其他人所说,你需要小心你的布尔逻辑 -(NOT X) || (NOT Y)相当于NOT (X AND Y),而你想要的NOT (X OR Y)是相当于(NOT X) AND (NOT Y).
对于这种特殊情况,还有几个其他选项,尽管没有一个像您尝试的无效语法那样简洁。
首先,in_array()它很容易阅读,但如果你在长列表中大量使用它,效率会很低(不过,对于这样的简单情况,不必担心性能):
$allowed_users = array('test1', 'user');
if ( ! in_array($_SESSION['usrName'], $allowed_users ) { ... }
或者,您可以使用用户名作为键构建哈希;随着列表的增长,这会更有效,因为 PHP 可以在不循环整个列表的情况下检查键:
$allowed_users = array('test1' => true, 'user' => true);
if ( ! array_key_exists($_SESSION['usrName'], $allowed_users) ) { ... }
// Or, if you don't mind PHP raising a few notices about accessing undefined keys
if ( ! $allowed_user[ $_SESSION['usrName'] ] ) { ... }
最后,您可以使用switch带有标签的语句,以及default充当“else”的案例:
switch ( $_SESSION['usrName'] )
{
case 'test1':
case 'user':
// These users are allowed :)
break;
default:
header('location:login.php');
}
您选择使用哪一个(如果有的话)将取决于您期望代码将来如何增长,但它们是有用的技巧。