2015-06-16 2 views
0

У меня есть рабочая панель с запросом ajax. Я запускаю запрос ajax на некоторые события, которые будут обновлять часть панели. Но если сеанс истек, часть будет обновлена ​​на странице входа. Как я могу выполнить перенаправление после вызова ajax, если срок действия сессии истек?Symfony2: перенаправление вызова ajax, если тайм-аут сеанса

Моего Аякса вызов:

$.ajax({ 
    type: "POST", 
    url: $(this).data('path'), 
    data: { datas : { 
     /* some datas */ 
    }}, 
    success: function(data){ 
     $('#mydivtorefresh').html(data); 
    }, 
    error: function(){ 
     showFlash(); 
    }, 
}); 

и мой контроллер:

public function myControllerAction(Request $request) 
{ 
    /* some logic */ 
    return $this->render('my/template/toUp.html.twig',array('results' => $results)); 

Все работает хорошо, но если моя сессия истекает, и я называю этот запрос Ajax, я получу страницу входа в '#mydivtorefresh' вместо глобального перенаправления. Я пробовал с eventListener или с обратным вызовом AjaxError, но без успеха. Любая помощь ?

ответ

1

Найден рабочее решение:

Добавить функцию в моем глобальном контроллере, который проверить, если сессия все еще активна и отвечает «КИ», если да, «КО», если нет.

public function pingAction() 
{ 
    $securityContext = $this->container->get('security.context'); 
    if ($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED') || $securityContext->isGranted('IS_AUTHENTICATED_FULLY')) { 
     return new Response("ok"); 
    } 
    return new Response("ko"); 
} 

и я проверить его каждый раз Ajax вызова обжигали с помощью события ПРЕДФИЛЬТРА Jquery:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if(originalOptions.data == "CHECKPING"){ 
     return; 
    } 
    $.get(Routing.generate('el_ping'), "CHECKPING", function(res) { 
     if(res == "ko"){ 
      window.location.replace(Routing.generate('fos_user_security_login')); 
     } 
    }); 
}); 
Смежные вопросы