網頁登陸一般都是半小時不動就超時了 對吧
我做了一個會員管理系統,前臺是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