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();
}