网页登陆一般都是半小时不动就超时了 对吧
我做了一个会员管理系统,前台是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