Flex session超时处理的解决方案

来源:互联网 发布:闽南语我的心情无人知 编辑:程序博客网 时间:2024/06/05 03:38

 Flex中实现session的一个类是FlexContext类,他将session保存在服务端。Flex客户端的每次RPC请求到服务端接口,都需要做session有效性验证,如果验证session失效,则需要按照一点的规则返回失败信息给Flex客户端,以提示客户端如何处理session失效后的流程。

简单例子:

1、web.xml中需要配置session的超时时间

<!-- 配置session超时时间(分钟) -->

<session-config>

    <session-timeout>3</session-timeout>   

  </session-config>


2、JAVA 服务器端RPC服务接口内的session验证代码:session中的"userName"应该由统一登录入口登录成功后保存的值。

//FlexSession是基于HttpSession创建,session也是共享的,如果session超时,则下次请求会重新创建新的session

FlexSession flexSession = FlexContext.getFlexSession();

if(null != flexSession &&null != flexSession.getAttribute("userName"))

{

System.out.println("--> message: " + flexSession.toString() +", name:" + flexSession.getAttribute("userName"));

}

else

{

//利用抛出异常,向客户端发送错误响应,客户端需要监听FaultEvent事件,进行后续处理

throw new Exception("Session失效");

}


3、Flex客户端接受服务器响应的处理流程:

protectedfunction button1_clickHandler(event:MouseEvent):void

{

//自己封装过的获取remote对象的方式,监听FaultEvent事件,接受服务器抛出来的异常

this.remote.getOperation("createDataSet").addEventListener(FaultEvent.FAULT,faultHandler);

this.remote.createDataSet("","", "", "", "", "");

}


/**

* 处理服务器响应异常时的流程

**/ 

private function faultHandler(event:FaultEvent):void

{

var errorMessage:ErrorMessage = event.messageas ErrorMessage;  

if(errorMessage && errorMessage.rootCause)

{  

var errorStr:String = errorMessage.rootCause.message;  

//简单的验证方式

if(errorStr.indexOf("Session失效") != -1)

{  

Alert.show("Session失效,重新登录!");  

}  

}  

}




0 0
原创粉丝点击