我想为一个"安全"的php页面创建一个函数,该页面将检查令牌(通过post传递的令牌和来自会话的令牌)
nbsp nbsp 但我不想写这样的两个if语句:
function CheckToken(){
if(isset($_POST['token']) && isset($_SESSION['token']))
if($_POST['token']==$_SESSION['token']) return true;
return false;
}
我能做这样的事吗(?):
function CheckToken(){
if(isset($_POST['token']) && isset($_SESSION['token']) && $_POST['token']==$_SESSION['token']) return true;
return false;
}
nbsp nbsp 以下是这些函数的执行顺序(使用and运算符时)。因此,如果使用and操作数,则如果第一个条件为false,则不要计算第二个条件。我记得vb.net有一个解决这个问题的方法(如果第一个函数为false,只计算第一个函数,不要计算第二个函数)
nbsp nbsp;那么,把所有东西都放在一行上安全吗(就像我在第二个例子中所做的那样)?
PHP执行与其他主要语言中常见的if
语句评估相同的操作,即从左到右进行检查。
所以如果你有
if (cond1 && cond2 && cond3)
场景1:
如果cond1
为真,则它将执行cond2
,然后执行cond3
样品:https://3v4l.org/Ap9SQ
场景2:
如果假设cond2
是false
,那么cond3
将被忽略
样品:https://3v4l.org/u9P4O
OR 也是如此
if (cond1 || cond2 || cond3)
如果cond1
为真,则将跳过cond2
和cond3
样品:https://3v4l.org/ZAZcD
因此,由于您的函数只是返回true
或false
,您甚至可以将其简化为以下内容:
function CheckToken() {
return isset($_POST['token']) &&
isset($_SESSION['token']) &&
$_POST['token'] == $_SESSION['token'];
}
拆分行以提高可读性。也可以签出isset
手册,因为您可以传入多个变量进行空检查。
是的,这样更改顺序确实没有什么区别。它是完全安全的,因为它所做的只是在执行完全相同的情况下更改脚本的外观。
最好做第二种选择。