我想拦截相同的请求,所以如果有一个请求,我会在会话中写一个标志,如下所示:
Security.php / beforeExecuteRoute 中的
public function isActed($actkey) {
$log = $this->getDI()->get('log');
$actq = $this->session->get($actkey);
$log->debug("magic show" . $actq);
if (!empty($actq)) {
$log->debug("isActed can not send agin!");
return false;
} else {
$log->debug("isActed clean,it can go!");
$this->session->set($actkey,true);
return true;
}
}
在ControllerBase.php / afterExecuteRoute
中 public function afterExecuteRoute() {
$controllername = strtolower($this->dispatcher->getControllerName());
$actionanme = strtolower($this->dispatcher->getActionName());
$cakey = $controllername . $actionanme;
$this->session->remove($cakey);
}
但是写入的会话需要实时,如果请求快速发送,它将无法正常工作。例如,同时,只允许一个人进入,当一个人进入时,门将关闭非常很快,然后人们去,然后打开...但是在关闭之前可能会有两个或两个以上的人同时出现,另一个人已经进来了。
我希望有人提供一些建议或其他方法来控制重复的请求。 谢谢!
答案 0 :(得分:0)
有几层如何实现这一点。第一个从视图层的JavaScript开始。您可以在click
事件上停用按钮。
如果你做得对,我建议实施Phalcon支持的CSRF机制。显示表单后,为其添加生成的唯一标记。从用户收到表单时,收到的令牌应与您在会话中保存的表格相匹配,并且应该重新生成会话中保存的令牌。这种方式相同的HTML无法第二次发送数据,因为令牌不匹配。