您的位置:首页 > 编程语言 > PHP开发

thinkphp3.2+dwz 验证session过期后跳转登陆页

2014-07-23 13:15 363 查看
背景:用thinkphp+dwz做了一个oa管理后台,先说下关于登录和结构。首页控制器对应的action里按照session是否有存登录用户,决定是跳转到dwz后台页还是展示登录页。在thinkphp里有两个controller都是继承Controller作为基类,只是一个在初始函数里需要进行auth的权限验证和session失效的判断,另一个不需要登录和权限验证。

问题描述:在测试session失效的时候,直接写了redirect跳转,然后发现没有达到想要的效果,页面没有进行跳转,而且也不是整个页面。后来查了下dwz.core.js的源码
ajaxDone:function(json){
if(json.statusCode == DWZ.statusCode.error) {
if(json.message && alertMsg) alertMsg.error(json.message);
} else if (json.statusCode == DWZ.statusCode.timeout) {
if(alertMsg) alertMsg.error(json.message || DWZ.msg("sessionTimout"), {okCall:DWZ.loadLogin});
else DWZ.loadLogin();
} else {
if(json.message && alertMsg) alertMsg.correct(json.message);
};
},
发现dwz已经定义了超时code,不想找代码,直接在谷歌浏览器控制台下敲了DWZ.statusCode.timeout看到值为301,另外还可以发现上面的代码里调用了loadLogin函数。
loadLogin:function(){
if ($.pdialog && DWZ._set.loginTitle) {
$.pdialog.open(DWZ._set.loginUrl, "login", DWZ._set.loginTitle, {mask:true,width:520,height:260});
} else {
window.location = DWZ._set.loginUrl;
}
},
函数里的 window.location = DWZ._set.loginUrl;
是作为页面跳转的,所以需要设置登录的url。不想改变源码,于是在加载完成dwz的模板页重写了一些初始化值,包括登录url。
$(function(){
var dwzUrl ='<?php echo '__PUBLIC__'.'/dwz/dwz.frag.xml'; ?>';
var themeUrl = '<?php echo '__PUBLIC__'.'/dwz/themes'; ?>';
DWZ.init(dwzUrl, {
//		loginUrl:"login_dialog.html", loginTitle:"登录",	// 弹出登录对话框
loginUrl:$("#site_url").val(),	// 跳到登录页面
statusCode:{ok:200, error:300, timeout:301}, //【可选】
pageInfo:{pageNum:"pageNum", numPerPage:"numPerPage", orderField:"orderField", orderDirection:"orderDirection"}, //【可选】
debug:false,	// 调试模式 【true|false】
callback:function(){
initEnv();
$("#themeList").theme({themeBase:themeUrl}); // themeBase 相对于index页面的主题base路径
}
});
});
#site_url是一个隐藏域,存放的是站点首页地址,具体是配置在thinkphp的config文件里,然后在BaseController里assign在模板页隐藏域存储,这样所有的js里都可以获取这个值,并且可以通过修改配置项改变值。

补充:要做到session验证不通过跳转到首页,也就需要做到两个内容。第一设置后台的返回code值为301(即dwz定义的超时code);第二设置好dwz登陆页的url。php端代码如下。
/**
* 后台控制器初始化
*/
protected function _initialize(){

// 设置站点名
$this->assign("site_url",C("SITE_URL"));

// 获取当前用户ID
$user = session('user_auth');
if ( empty($user) ) {
echo json_encode(array('statusCode' => 301,'message' => '长时间未操作已断开连接,请刷新页面重新登录。'));exit;
}
$uid = $user['uid'] ;

//  检测当前页是否有权限访问      // ' admin/index/index'
$rule  = strtolower(MODULE_NAME.'.'.CONTROLLER_NAME.'.'.ACTION_NAME);
$uncheck_rule = C("UNCHECK_RULE");

if(!in_array($rule, $uncheck_rule)){
$check_result = $this->check_permision($rule, $uid);
if (!$check_result){
echo json_encode(array('statusCode' => 300,'message' => '您没有权限访问此页面'));exit;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: