网页登陆一般都是半小时不动就超时了 对吧
我做了一个会员管理系统,前台是flex的,相信有很多人用flex做这样的管理系统
但是如果session超时后,用户操作没有提示一直在那里点,系统没有任何回应,用户体验是不是就差了呢?
我这里有一个解决的方法
我的flex端是用 URLRequest 和 URLLoader 来从后台获取数据的
于是我只需要重写 URLLoader 判断返回的数据是否包含了提示登陆的信息就行了
下面是重写URLLoader
import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.navigateToURL; import mx.controls.Alert; /** * 重写JSONDecoder * 如果是登陆超时了 就提示超时 并且跳转到登陆页面 */ public class MyURLLoader extends URLLoader { public function MyURLLoader(request:URLRequest=null) { super(request); } /** * 得到load返回的数据 * 判断处理是否超时,需要跳转到登陆页面 * 本来我是想重写 data 属性的,无奈没成功,提示不兼容的覆盖,所以只能重新写一个方法来处理data了 */ public function getDate():String{ // 如果是登陆超时了 就提示超时 并且跳转到登陆页面 if (super.data.toString().indexOf("会员管理系统_海娜韵植物养发") != -1) { var confirmHandler:Function=function(dlgObj:Object):void { if (dlgObj.detail == Alert.YES) { navigateToURL(new URLRequest("/login.html"), "_self"); } } Alert.show("登陆超时了,您需要重新登陆会员管理系统!!", "温馨提示:", Alert.YES | Alert.NO, null, confirmHandler, null, Alert.NO); } return super.data; } }
然后所有从后台取数据的loder都用MyURLLoader
var actionComplete:Function=function(e:Event):void { // 原来是 loader.data // 本来我是想重写 data 属性的,无奈没成功,提示不兼容的覆盖, //var decoder:JSONDecoder=new JSONDecoder(loader.getDate()); } var request:URLRequest=new URLRequest(com.hainayun.flex.common.sys.members.Card.ACT_URL + "getAll"); request.method="POST"; var loader:MyURLLoader=new MyURLLoader(request); loader.addEventListener(Event.COMPLETE, actionComplete);
当然后台是需要判断当session失效的时候跳转到 /login.html 也就是登陆页面
当session失效后 不管用户点什么操作 都会提示session失效 然后跳转到登陆页面了
后台用的 JFinal做的,用JFinal的 handler和Interceptor做权限过滤非常方便
以前本系统的后台是是用strtus+mybatis做的 现在换JFinal后各种轻松 虽然改动很大 但是很值得啊 现在看起来舒服多了
再次感谢 @JFinal