所以我目前正在编写PHP 5.6.10中的用户注册,并发现了一些奇怪的东西:函数 Token :: check(Input :: get('token')) < / strong>返回一个布尔值。如果返回true,则执行if语句。到目前为止工作正常,但是当我在if语句之前var_dump时,if语句没有被执行。
这种行为有什么解释吗?
var_dump(Token::check(Input::get('token')));
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
echo "Loop.";
$validate = new Validate();
$validation = $validate->check($_POST, array(
'first_name' => array(
'required' => true,
'min' => 1,
'max' => 50
)
));
if($validation->passed()) {
echo "Die Eingaben waren korrekt.";
} else {
foreach ($validation->errors() as $error) {
echo $error,"<br>";
}
echo "<br>";
}
}
}
(我希望在缩短代码时我没有写错字) 这是check() - 按要求的功能:
public static function check($token) {
$tokenName = Config::get('session/token_name');
if(Session::exists($tokenName) && $token === Session::get($tokenName)) {
Session::delete($tokenName);
return true;
}
return false;
}
答案 0 :(得分:1)
基于check
方法的代码:
public static function check($token) {
$tokenName = Config::get('session/token_name');
if(Session::exists($tokenName) && $token === Session::get($tokenName)){
Session::delete($tokenName);
return true;
}
return false;
}
您第一次打电话:
var_dump(Token::check(Input::get('token')));
它从会话中删除令牌,阻止了条件:
要满足 if(Token::check(Input::get('token')))
。
也许你可以在check函数中添加一个额外的参数来帮助你调试而不是删除令牌:
public static function check($token, $test = false) {
$tokenName = Config::get('session/token_name');
if(Session::exists($tokenName) && $token === Session::get($tokenName)){
if (!$test) {
Session::delete($tokenName);
}
return true;
}
return false;
}