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的源码
是作为页面跳转的,所以需要设置登录的url。不想改变源码,于是在加载完成dwz的模板页重写了一些初始化值,包括登录url。
补充:要做到session验证不通过跳转到首页,也就需要做到两个内容。第一设置后台的返回code值为301(即dwz定义的超时code);第二设置好dwz登陆页的url。php端代码如下。
问题描述:在测试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; } } }
相关文章推荐
- 解决方案:SSM+vue+webpack+vue-resource+vue-route路由项目验证session过期跳转至登陆界面
- 当session过期后自动跳转到登陆页
- Ajax请求session过期后自动跳转到登陆页
- session过期后含用iframe页面如何自动跳转到登陆页
- session过期后自动跳转到登陆页
- session过期后含用iframe框架页面如何自动跳转到登陆页
- 当session过期后自动跳转到登陆页
- 当session过期后自动跳转到登陆页
- thinkphp3.2设置session的过期时间
- Netbeans判断session过期跳转到登陆页
- Java Web实现session过期后自动跳转到登陆页功能【基于过滤器】
- Spring 3 + dwz session过期跳转解决方法
- session过期后含用iframe页面如何自动跳转到登陆页
- session过期后自动跳转到登陆页
- 当session过期后自动跳转到登陆页而且会跳出iframe框架
- session过期 点击跳转到登陆页
- Session过期后自动跳转到登陆页
- session过期后自动跳转到登陆页
- session过期后自动跳转到登陆页
- 关于使用struts2时子窗体页面跳转后在父窗体打开的问题以及Session过期后的页面跳转问题