我在kernel.request上配置了一个监听器,当会话时间达到某个值时,它会设置一个带有重定向的新响应。在会话结束后,侦听器工作正常并在下一个请求时重定向到某个页面。但我的问题是在页面上我有很多链接,如果我多次按相同的链接,重定向的初始请求被取消/停止,并且按下最后一个链接发出新请求,所以它通过我的重定向,即使会议已经结束并被销毁。所以,我的问题是如何在第一次请求后阻止额外的请求/链接按下? 这是我的代码:
public function onKernelRequestSession(GetResponseEvent $event)
{
$request = $event->getRequest();
$route = $request->get('_route');
$session = $request->getSession();
if ((false === strpos($route, '_wdt')) && ($route != null)) {
$session->start();
$time = time() - $session->getMetadataBag()->getCreated();
if ($route != 'main_route_for_idle_page') {
if (!$session->get("active") && $route == 'main_route_for_site_pages') {
$session->invalidate();
$session->set("active", "1");
} else {
if ($time >= $this->sessionTime) {
$session->clear();
$session->invalidate();
$event->setResponse(new RedirectResponse($this->router->generate('main_route_for_idle_page')));
}
}
} else {
if ($session->get("activ")) {
$session->clear();
$session->invalidate();
}
}
}
}
Thak you。
答案 0 :(得分:0)
基本上,如果服务器期望SEQUENCE号码为2
而客户端发送1
,则该请求将被拒绝。
与上述想法类似,但使用独特的哈希来消除增量序列的预测性质。
答案 1 :(得分:0)
我使用JQuery解决了这个问题:当按下链接时我禁用了其他链接,因此只有一个请求来自页面:
var isClicked = false;
$(".menu-link").click(function(e) {
if(!isClicked) {
isClicked = true;
} else {
e.preventDefault();
}
});
感谢。