`
fatherican
  • 浏览: 49172 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Flex中的Session管理

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


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


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

  1. packagecom.ldfsoft.util;
  2. importflex.messaging.FlexContext;
  3. publicclassFlexSession{
  4. /**
  5. *保存Session
  6. *@paramname
  7. *@paramvalue
  8. */
  9. publicvoidsetSession(Stringname,Stringvalue){
  10. FlexContext.getFlexSession().setAttribute(name,value);
  11. }
  12. /**
  13. *获取Session
  14. */
  15. publicStringgetSession(Stringname){
  16. Stringvalue=(String)FlexContext.getFlexSession().getAttribute(name);
  17. returnvalue;
  18. }
  19. /**
  20. *清除Session
  21. *@paramname
  22. */
  23. publicvoidremoveSession(Stringname){
  24. FlexContext.getFlexSession().removeAttribute(name);
  25. }
  26. }


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


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


  1. <?xmlversionxmlversion="1.0"encoding="utf-8"?>
  2. <s:Applicationxmlns: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. <fx:Script>
  6. <![CDATA[
  7. importflash.net.navigateToURL;
  8. importmx.controls.Alert;
  9. importmx.events.FlexEvent;
  10. importmx.rpc.events.FaultEvent;
  11. importmx.rpc.events.ResultEvent;
  12. protectedfunctionlogin_clickHandler(event:MouseEvent):void
  13. {
  14. //TODOAuto-generatedmethodstub
  15. varuserName:String=username.text;
  16. varpassWorld:String=passworld.text;
  17. if(userName!=""&&passWorld!=""){
  18. //保存Session
  19. sessionManage.setSession("account",userName);
  20. }else{
  21. Alert.show("用户名与密码不能为空!","提示");
  22. }
  23. }
  24. protectedfunctionsessionManage_faultHandler(event:FaultEvent):void
  25. {
  26. //TODOAuto-generatedmethodstub
  27. Alert.show(event.fault.message,"出错了");
  28. }
  29. protectedfunctionsessionManage_resultHandler(event:ResultEvent):void
  30. {
  31. //TODOAuto-generatedmethodstub
  32. forwPage();
  33. }
  34. privatefunctionforwPage():void{
  35. varurl:URLRequest=newURLRequest("http://localhost:9080/red5Flex/swf/welcome.html");
  36. navigateToURL(url,"_self");
  37. }
  38. ]]>
  39. </fx:Script>
  40. <fx:Declarations>
  41. <!--Placenon-visualelements(e.g.,services,valueobjects)here-->
  42. <s:RemoteObjectid="sessionManage"destination="sessionManage"endpoint="../messagebroker/amf"fault="sessionManage_faultHandler(event)">
  43. <s:methodname="setSession"result="sessionManage_resultHandler(event)"/>
  44. </s:RemoteObject>
  45. </fx:Declarations>
  46. <s:Panelx="242"y="107"width="549"height="367"title="请登陆"fontSize="16">
  47. <s:Labelx="99"y="106"text="用户名:"/>
  48. <s:Labelx="100"y="175"text="密码:"/>
  49. <s:TextInputx="179"y="106"id="username"/>
  50. <s:TextInputx="180"y="175"id="passworld"displayAsPassword="true"/>
  51. <s:Buttonx="409"y="130"height="48"id="login"label="登陆"click="login_clickHandler(event)"/>
  52. </s:Panel>
  53. </s:Application>


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

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


  1. <?xmlversionxmlversion="1.0"encoding="utf-8"?>
  2. <s:Applicationxmlns: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. importmx.controls.Alert;
  8. importmx.events.FlexEvent;
  9. importmx.rpc.events.FaultEvent;
  10. importmx.rpc.events.ResultEvent;
  11. [Bindable]privatevaraccount:String="";
  12. protectedfunctionapp_applicationCompleteHandler(event:FlexEvent):void
  13. {
  14. //TODOAuto-generatedmethodstub
  15. //获取session
  16. sessionManage.getSession("account");
  17. }
  18. protectedfunctionsessionManage_resultHandler(event:ResultEvent):void
  19. {
  20. //注意获得Session的方式
  21. account=event.resultasString;
  22. message.text=account+",欢迎您归来..."
  23. }
  24. protectedfunctionsessionManage_faultHandler(event:FaultEvent):void
  25. {
  26. //TODOAuto-generatedmethodstub
  27. Alert.show("获取session失败...","提示");
  28. }
  29. protectedfunctionexist_clickHandler(event:MouseEvent):void
  30. {
  31. //TODOAuto-generatedmethodstub
  32. //清除session
  33. sessionManage.removeSession("account");
  34. varurl:URLRequest=newURLRequest("http://localhost:9080/red5Flex/swf/Login.html");
  35. navigateToURL(url,"_self");
  36. }
  37. ]]>
  38. </fx:Script>
  39. <fx:Declarations>
  40. <!--Placenon-visualelements(e.g.,services,valueobjects)here-->
  41. <s:RemoteObjectid="sessionManage"destination="sessionManage"endpoint="../messagebroker/amf"result="sessionManage_resultHandler(event)"fault="sessionManage_faultHandler(event)"/>
  42. </fx:Declarations>
  43. <s:Labelx="394"y="229"fontSize="18"width="229"height="31"id="message"/>
  44. <s:Buttonx="443"y="283"label="退出"id="exist"fontSize="16"click="exist_clickHandler(event)"/>
  45. </s:Application>


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


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




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



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


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


原创文章,转载请注明出处:http://www.dianfusoft.com/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics