Flex中的Session管理

时间:2022-01-23 08:47:00
Session是Jsp 9大内置对象之一,但是在Flex中却没有这一概念。曾经看过一本叫《Flex 企业应用开发实战》书,里面讲述了一点利用Session增加控制权限的问题。本人也尝试着做了一个小demo.

--->点击阅读更多    

           Flex中实现session的一个类是FlexContext类,他将session保存在服务端。


           新建一个java类FlexSession.java,里面写了各种存贮、获取、清除Session的方法:

 

  1. package com.ldfsoft.util;  
  2.    
  3. import flex.messaging.FlexContext;  
  4.    
  5. public class FlexSession {  
  6.      
  7.        /** 
  8.         * 保存Session 
  9.         * @param name 
  10.         * @param value 
  11.         */  
  12.        public void setSession(String name,String value){  
  13.            FlexContext.getFlexSession().setAttribute(name,value);  
  14.        }  
  15.         
  16.        /** 
  17.         * 获取 Session 
  18.         */  
  19.        public String getSession(String name){  
  20.            String value=(String) FlexContext.getFlexSession().getAttribute(name);  
  21.            return value;  
  22.        }  
  23.        /** 
  24.         * 清除Session 
  25.         * @param name 
  26.         */  
  27.        public void removeSession(String name){  
  28.            FlexContext.getFlexSession().removeAttribute(name);  
  29.        }  
  30.         
  31. }  


 

       然后将此类在flex配置文件中配置一下,这个就不说了。


       新建一个mxml文件Login.mxml,代码如下所示:


  1. <?xmlversionxmlversion="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.               xmlns:s="library://ns.adobe.com/flex/spark"  
  4.               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" >  
  5.      
  6.     <fx:Script>  
  7.        <![CDATA[ 
  8.            import flash.net.navigateToURL; 
  9.            import mx.controls.Alert; 
  10.            import mx.events.FlexEvent; 
  11.            import mx.rpc.events.FaultEvent; 
  12.            import mx.rpc.events.ResultEvent; 
  13.            
  14.            protected function login_clickHandler(event:MouseEvent):void 
  15.            { 
  16.               // TODOAuto-generated method stub 
  17.               var userName:String=username.text; 
  18.               var passWorld:String=passworld.text; 
  19.               if(userName!=""&&passWorld!=""){ 
  20.                   //保存Session 
  21.                   sessionManage.setSession("account",userName); 
  22.               }else{ 
  23.                   Alert.show("用户名与密码不能为空!","提示"); 
  24.               } 
  25.            } 
  26.            
  27.            protected function sessionManage_faultHandler(event:FaultEvent):void 
  28.            { 
  29.               // TODOAuto-generated method stub 
  30.               Alert.show(event.fault.message,"出错了"); 
  31.            } 
  32.            
  33.            protected function sessionManage_resultHandler(event:ResultEvent):void 
  34.            { 
  35.               // TODOAuto-generated method stub 
  36.               forwPage(); 
  37.            } 
  38.   
  39.            private function forwPage():void{ 
  40.               var url:URLRequest=new URLRequest("http://localhost:9080/red5Flex/swf/welcome.html"); 
  41.               navigateToURL(url,"_self"); 
  42.            } 
  43.        ]]>  
  44.     </fx:Script>  
  45.     <fx:Declarations>  
  46.        <!-- Place non-visualelements (e.g., services, value objects) here -->  
  47.        <s:RemoteObject id="sessionManage" destination="sessionManage" endpoint="../messagebroker/amf" fault="sessionManage_faultHandler(event)">  
  48.            <s:method name="setSession"result="sessionManage_resultHandler(event)" />  
  49.        </s:RemoteObject>  
  50.     </fx:Declarations>  
  51.     <s:Panel x="242" y="107" width="549" height="367" title="请登陆" fontSize="16">  
  52.        <s:Label x="99" y="106" text="用户名:"/>  
  53.        <s:Label x="100" y="175" text="密码:"/>  
  54.        <s:TextInput x="179" y="106" id="username"/>  
  55.        <s:TextInput x="180" y="175" id="passworld" displayAsPassword="true" />  
  56.        <s:Button x="409" y="130" height="48" id="login" label="登陆"click="login_clickHandler(event)"/>  
  57.     </s:Panel>  
  58.      
  59. </s:Application>  


 

           这个文件是一个登陆界面,登陆中将用户信息保存在服务端的Session里。

 

           接着新建一个mxml文件welcome.mxml,代码如下所示:


  1. <?xmlversionxmlversion="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.               xmlns:s="library://ns.adobe.com/flex/spark"  
  4.               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"applicationComplete="app_applicationCompleteHandler(event)">  
  5.     <fx:Script>  
  6.        <![CDATA[ 
  7.            import mx.controls.Alert; 
  8.            import mx.events.FlexEvent; 
  9.            import mx.rpc.events.FaultEvent; 
  10.            import mx.rpc.events.ResultEvent; 
  11.            [Bindable]private var account:String=""; 
  12.            protected function app_applicationCompleteHandler(event:FlexEvent):void 
  13.            { 
  14.               // TODOAuto-generated method stub 
  15.               //获取session 
  16.               sessionManage.getSession("account"); 
  17.            } 
  18.            
  19.            protected function sessionManage_resultHandler(event:ResultEvent):void 
  20.            { 
  21.               //注意获得Session的方式 
  22.               account=event.result as String; 
  23.               message.text=account+",欢迎您归来..." 
  24.            } 
  25.            
  26.            protected function sessionManage_faultHandler(event:FaultEvent):void 
  27.            { 
  28.               // TODOAuto-generated method stub 
  29.               Alert.show("获取session失败...","提示"); 
  30.            } 
  31.            
  32.            protected function exist_clickHandler(event:MouseEvent):void 
  33.            { 
  34.               // TODOAuto-generated method stub 
  35.               //清除session 
  36.               sessionManage.removeSession("account"); 
  37.               var url:URLRequest=new URLRequest("http://localhost:9080/red5Flex/swf/Login.html"); 
  38.               navigateToURL(url,"_self"); 
  39.            } 
  40.            
  41.        ]]>  
  42.     </fx:Script>  
  43.     <fx:Declarations>  
  44.        <!-- Place non-visualelements (e.g., services, value objects) here -->  
  45.        <s:RemoteObject id="sessionManage" destination="sessionManage" endpoint="../messagebroker/amf" result="sessionManage_resultHandler(event)"fault="sessionManage_faultHandler(event)" />  
  46.     </fx:Declarations>  
  47.     <s:Label x="394" y="229" fontSize="18" width="229" height="31" id="message"/>  
  48.     <s:Button x="443" y="283" label="退出"id="exist" fontSize="16" click="exist_clickHandler(event)"/>  
  49.      
  50. </s:Application>  


 

          当跳转到这个页面时页面初始化后会从服务器获取账户信息,如果有则在页面上展示。点击“退出”按钮则清除session并跳转到登陆页面。


           运行Login.mxml页面,页面如下所示:


Flex中的Session管理


         输入用户信息,点击“登陆”按钮,跳转到welcome.html页面:


 Flex中的Session管理


           点击“退出”按钮后会跳转到首页,再次运行此页面时用户信息则会为null,或者登陆后关闭浏览器再打开此页面也会获取不到session,这就是session的一大特征吧~


            通过合理管理Session.可以减少传递参数的麻烦,可以进行权限管理。尽管如此,工作中还是不提倡多用session.


--->点击阅读更多