首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2:如果会话超时,ajax调用重定向

Symfony2:如果会话超时,ajax调用重定向
EN

Stack Overflow用户
提问于 2015-06-16 15:46:31
回答 1查看 938关注 0票数 0

我有一个带有ajax请求的工作仪表板。我对一些事件发出ajax请求,这些事件将更新仪表板的一部分。但是,如果会话已过期,则将使用登录页刷新该部分。如果会话已过期,如何在ajax调用之后进行重定向?

我的ajax调用:

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

我的控制器:

代码语言:javascript
复制
public function myControllerAction(Request $request)
{
    /* some logic */
    return $this->render('my/template/toUp.html.twig',array('results' => $results));

一切正常,但是如果我的会话到期,并且我调用这个ajax请求,我将在‘#mydivto刷新’中获得登录页面,而不是全局重定向。我尝试过使用eventListener或AjaxError回调,但没有成功。有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 07:59:42

找到了一个可行的解决方案:

在我的全局控制器中添加一个函数,该函数检查会话是否仍然处于活动状态,如果是,则用"ok“响应,如果不是,则用"ko”响应。

代码语言:javascript
复制
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");
}

每次使用preFilter jquery事件触发ajax调用时,我都会检查它:

代码语言:javascript
复制
$.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'));
        }
    });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30872323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档