PHP 令牌确认很奇怪

Strange thing with PHP token confirmation

在提交表单之前,我检查令牌是否匹配,如下所示:

if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
  };

if($request->token==$_SESSION['token']){
  
  ..some code..

}else{

echo "Token confirmation error!";

}

HTML:

<input class="mt-1 mb-1" type="hidden" name="token" value="<?php if($_SESSION['token']){echo $_SESSION['token'];}else{echo '';}; ?>">

并且由于某种原因,else 总是被触发,尽管理论上应该在发送数据时进行检查。可能是什么问题?

UPD.And 此外,错误文本始终显示在页面顶部,尽管我使用 responseText(ajax request)bootstrap toasts.

显示所有通知

问题已通过添加 $request 是否存在的检查解决。

if($request){//This one
    if($request->token==$_SESSION['token']){
   
  ...some code...

}else{

      echo "Token confirmation error!";

    };
  };