Session 如何在发送响应后防止额外的页面请求
我在kernel.request上配置了一个监听器,当会话时间达到某个值时,它会设置一个带有重定向的新响应。侦听器工作正常,在会话结束后,在下一个请求中重定向到某个页面。但我的问题是在页面上,我有很多链接,如果我多次按同一链接,重定向的初始请求将被取消/停止,并在最后一个链接被按下时发出新请求,因此即使会话已结束并被破坏,它也会通过我的重定向。因此,我的问题是,如何防止在发出第一个请求后出现额外的请求/链接按压? 这是我的密码:Session 如何在发送响应后防止额外的页面请求,session,symfony,redirect,request,listener,Session,Symfony,Redirect,Request,Listener,我在kernel.request上配置了一个监听器,当会话时间达到某个值时,它会设置一个带有重定向的新响应。侦听器工作正常,在会话结束后,在下一个请求中重定向到某个页面。但我的问题是在页面上,我有很多链接,如果我多次按同一链接,重定向的初始请求将被取消/停止,并在最后一个链接被按下时发出新请求,因此即使会话已结束并被破坏,它也会通过我的重定向。因此,我的问题是,如何防止在发出第一个请求后出现额外的请求/链接按压? 这是我的密码: public function onKernelReque
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();
}
}
}
}
谢谢。Idea#1:简单增量计数器
- 每个请求都以param的形式发送序列号,该序列号在服务器上按预期进行验证
- 服务器增加数字并通过响应将其发送回
- 新号码将在以后的请求中使用
2
,而客户端发送1
,则请求将被拒绝
想法2:每次都是唯一的散列
与上面的想法类似,但使用独特的哈希来消除增量序列的预测性。我使用JQuery解决了这个问题:当按下一个链接时,我禁用了其他链接,因此只从页面发出一个请求:
var isClicked = false;
$(".menu-link").click(function(e) {
if(!isClicked) {
isClicked = true;
} else {
e.preventDefault();
}
});
谢谢。谢谢你的想法,但我用Jquery解决了这个问题。