张迪 2012-05-22 10:32:34 8448次浏览 2条评论 0 0 0

此方法要求Yii 1.1.9 或以上版本

问题

用户在较长时间内没有动作,php回话已经超时,回话过期后又有一个ajax请求但是程序并没有任何反应,例如在gridview中,gridview的内容完全消失。

正确的行为

显示登录页面,登录后再重定向回来。

解决方法

在配置文件中设置 loginRequiredAjaxResponse:

...
'components'=>array(
    'user'=>array(          
        ...
        'loginRequiredAjaxResponse' => 'YII_LOGIN_REQUIRED',
        ...
    ),
    ...
In your view or template

<?php
    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 = options.url;
                    }
                }
            );
        ');
    }
?>

注意:

以上代码在 options.url 为可用页面的url是测试通过,如果不是这种情况或者你只是想显示登录页面请替换:

window.location.href = options.url;

window.location.href = "'.Yii::app()->createUrl('/site/login').'";

英文原文: http://www.yiiframework.com/wiki/321/using-loginrequiredajaxresponse-to-solve-ajax-session-timeout/

您需要登录后才可以评论。登录 | 立即注册