【问题标题】:Session Expire Symfony 2 Ajax会话过期 Symfony 2 Ajax
【发布时间】:2015-11-04 22:33:32
【问题描述】:

我的应用程序使用 ajax 来请求数据。我正在使用 Symfony2,当会话到期并且我使用 ajax 发出请求时,登录表单显示在我的应用程序的主要区域内,而不是应有的另一个视图。怎么能解决这个问题。谢谢

【问题讨论】:

    标签: ajax symfony session login


    【解决方案1】:

    我建议创建一个事件监听器来监听每个请求:

    services.yml:

    your_request_listener:
        class: Acme\AppBundle\EventListener\RequestListener
        arguments: [@security.token_storage]
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onRequest }
    

    在这个事件监听器中,我会检查请求的类型,所以这只是 Ajax 请求监听器。当请求是 ajax 类型时,我会检查会话是否已过期 - 如果是,我将创建响应,该响应将是 ajax 请求的有效响应(即JsonResponse)并将此响应设置为发送给用户。

    class RequestListener
    {
        private $tokenStorage;
    
        public function __construct(TokenStorageInterface $tokenStorage)
        {
            $this->tokenStorage = $tokenStorage;
        }
    
        public function onRequest(GetResponseEvent $event)
        {
            $request = $event->getRequest();
            if (!$request->isXmlHttpRequest()) {
                return; //we dismiss requests other than ajax
            }
    
            //now you check if user is authenticated/session expired/whatever you need
            $token = $this->tokenStorage->getToken();
            if ($token === null) {
                //now you create response which you would expect in your js doing ajax, for example JsonResponse
                $response = new JsonResponse(); //you should give some content here
                $event->setResponse($response); //now you override response which will be sent to user
            }
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用entry point 来验证请求是否为 AJAX 请求。如果是,则返回带有 401 HTTP 状态代码的 JSON 响应。然后在 JS 代码中验证 HTTP 状态代码。如果是 401,则重定向到登录页面。

      您可以阅读我的帖子here 以及完整的解决方案(请参阅我自己对我自己问题的回答)。这个解决方案就是基于这个优秀的post

      【讨论】:

        猜你喜欢
        • 2012-09-16
        • 2019-06-24
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 2016-03-20
        • 2015-11-06
        相关资源
        最近更新 更多