在 Phalcon 中控制重复请求
Control repeated requests in Phalcon
我想拦截同一个请求,所以我在会话中写了一个标志,如果一个请求来了,就像这样:
在安全中。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);
}
但是write的session需要实时,如果request send很快,就不行了fine.For例如,同时,只允许一个人进入,当一个人进入时,门会很快关上,然后人走,然后再开。。。但是可能同时进来两个或更多人,在关门之前,另一个人已经进来了。
希望有人给点建议,或者其他控制重复请求的方法。
谢谢!
实现这一点的层次很少。第一个在视图层上以 JavaScript 开头。您可以在 click
事件中禁用按钮。
在您正确完成此操作后,我建议实施 Phalcon 支持的 CSRF 机制。显示表单后,您将为其添加一个生成的唯一标记。当从用户接收到的表单接收到的令牌应该与您在会话中保存的一个相匹配,并且应该重新生成一个保存在会话中的令牌。这样同样HTML无法第二次发送数据,因为token不匹配
我想拦截同一个请求,所以我在会话中写了一个标志,如果一个请求来了,就像这样:
在安全中。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);
}
但是write的session需要实时,如果request send很快,就不行了fine.For例如,同时,只允许一个人进入,当一个人进入时,门会很快关上,然后人走,然后再开。。。但是可能同时进来两个或更多人,在关门之前,另一个人已经进来了。
希望有人给点建议,或者其他控制重复请求的方法。 谢谢!
实现这一点的层次很少。第一个在视图层上以 JavaScript 开头。您可以在 click
事件中禁用按钮。
在您正确完成此操作后,我建议实施 Phalcon 支持的 CSRF 机制。显示表单后,您将为其添加一个生成的唯一标记。当从用户接收到的表单接收到的令牌应该与您在会话中保存的一个相匹配,并且应该重新生成一个保存在会话中的令牌。这样同样HTML无法第二次发送数据,因为token不匹配