Php Yii CGridView捕获Ajax响应并解决会话超时

Php Yii CGridView捕获Ajax响应并解决会话超时,php,jquery,ajax,session,yii,Php,Jquery,Ajax,Session,Yii,我正在使用Yii MVC 用户已登录 我使用的浏览器有两个选项卡 从第二个选项卡,我注销了用户,因此,现在,用户也从第一个选项卡登录 现在,我尝试在gridview中使用ajax调用查询db 用户已注销,因此,我得到一个302状态代码 这就是我想要捕获此错误的地方,并将用户重定向到登录页面,因为会话已过期 在内部,Yii尝试将我重定向到登录页面,但失败 我看到login操作带有200状态代码,但没有重定向 我找到了一些有关此行为的信息,但它不起作用: 我尝试使用一个新的yii项目,因为我怀疑用

我正在使用
Yii MVC

用户已登录

我使用的浏览器有两个选项卡

从第二个选项卡,我注销了用户,因此,现在,用户也从第一个选项卡登录

现在,我尝试在
gridview
中使用
ajax调用查询
db

用户已注销,因此,我得到一个
302
状态代码

这就是我想要捕获此错误的地方,并将用户重定向到登录页面,因为会话已过期

在内部,Yii尝试将我重定向到
登录
页面,但失败

我看到
login
操作带有
200
状态代码,但没有重定向

我找到了一些有关此行为的信息,但它不起作用:

我尝试使用一个新的yii项目,因为我怀疑
用户模块是罪魁祸首

它不是用户模块,它的yii

在框架中,在
CAccessControlFilter
中调用以下函数:

如果会话已过期,我刷新页面,我可以看到die消息

但是如果会话已过期,并且我有一个ajax调用,则重定向不会发生

protected function accessDenied($user,$message)
    {
        die(__FUNCTION__);
        debug_print_backtrace();
        if($user->getIsGuest())
            $user->loginRequired();
        else
            throw new CHttpException(403,$message);
    }

main.php
文件中的components->user下,我设置了
'loginRequiredAjaxResponse'=>'YII\u LOGIN\u REQUIRED',
http://www.yiiframework.com/wiki/321/using-loginrequiredajaxresponse-to-solve-ajax-session-timeout/

在模板或视图中输入以下代码:

<?php
        /*
         * if ajax call and session has expired, then redirect to user/login
         */
        if (Yii::app()->components['user']->loginRequiredAjaxResponse) {
            Yii::app()->clientScript->registerScript('ajaxLoginRequired', '
            jQuery("body").ajaxComplete(
                function(event, request, options) {
                    if (request.responseText == "' . Yii::app()->components['user']->loginRequiredAjaxResponse . '") {
                        window.location.href = "'.Yii::app()->createUrl('/user/login').'";
                    }
                }
            );
        ');
        }
        ?>

请分享一些代码。
    if (Yii::app()->user->isGuest) {
        /*
         *  covers even the ajax requests if user session has expired
         */
        Yii::app()->user->loginRequired();
    }