假设我已经在2个不同的窗口中打开了项目,并且使用其中一个窗口注销了,或者您可以说会话已超时/过期(任何一种情况)。 之后,在另一个窗口中,当会话被销毁时,我能够执行XHR请求。
为此,我进行了很多搜索并实施了其中的一些内容。我添加了一个事件监听器,但是没有用。
namespace Webkul\CampusConnect\EventListener;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Webkul\CampusConnect\EventListener\AjaxAuthenticationListener;
class AjaxAuthenticationListener
{
/**
* Handles security related exceptions.
*
* @param GetResponseForExceptionEvent $event An GetResponseForExceptionEvent instance
*/
public function onCoreException(GetResponseForExceptionEvent $event)
{
dump('saurabh');
die;
$exception = $event->getException();
$request = $event->getRequest();
if ($request->isXmlHttpRequest()) {
if ($exception instanceof AuthenticationException || $exception instanceof AccessDeniedException) {
$event->setResponse(new Response('', 403));
}
}
}
}
Service.yaml
ajax.authentication.listener:
class: Webkul\CampusConnect\EventListener\AjaxAuthenticationListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onCoreException, priority: 1000 }
JavaScript
$(document).ready(function() {
$(document).ajaxError(function (event, jqXHR) {
if (403 === jqXHR.status) {
window.location.reload();
}
});
});
用户注销后如何停止执行XHR请求?
答案 0 :(得分:0)
似乎因为您的优先级设置为1000,所以默认侦听器还将运行并响应并重定向到登录页面(ajax看到-https://stackoverflow.com/a/33578947/9358736)。当您将优先级更改为-1000时,它应该可以工作(应该这样做,因为它取决于您的许多应用程序配置)。
您可以通过在$event->setResponse
之前添加纯PHP代码来进行测试:
http_response_code(403);
die('Forbidden');