控制Phalcon中的重复请求

时间:2016-03-06 15:41:06

标签: php session phalcon

我想拦截相同的请求,所以如果有一个请求,我会在会话中写一个标志,如下所示:

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);
    }

但是写入的会话需要实时,如果请求快速发送,它将无法正常工作。例如,同时,只允许一个人进入,当一个人进入时,门将关闭非常很快,然后人们去,然后打开...但是在关闭之前可能会有两个或两个以上的人同时出现,另一个人已经进来了。

我希望有人提供一些建议或其他方法来控制重复的请求。    谢谢!

1 个答案:

答案 0 :(得分:0)

有几层如何实现这一点。第一个从视图层的JavaScript开始。您可以在click事件上停用按钮。

如果你做得对,我建议实施Phalcon支持的CSRF机制。显示表单后,为其添加生成的唯一标记。从用户收到表单时,收到的令牌应与您在会话中保存的表格相匹配,并且应该重新生成会话中保存的令牌。这种方式相同的HTML无法第二次发送数据,因为令牌不匹配。