通过Flex读写浏览器中的cookie的方法整理
一直以来都想做个网站管理的编辑器,但是我预估到的最大问题就是用flex来访问和读取网站,其中就用到了登陆校验的cookie,但是找了好多的网站,都没有找到相关的,信心,只是在adobe的官方的api中介绍了新增的htmlLoader 的相关属性方法,无济于事,自己去研究,调了又调,试了又试的,终于向客户端写cookie成功了,跟大家分享一下:
其实有两种方法可行:
方法一:是再模板html中添加一段js写cookie的代码,再flex端用ExternalInterface.call来调用,感觉麻烦,没用这种方法:
方法二:直接在flex端向客户端写cookie
关键代码是:
完整的用户登录代码,当用户登录成功时,调用向客户端写cookie的代码
1 2 3 4 5 6 7 8 9 10 | //向客户端写入cookie private function setMyCookie(name: String ,value: String ) : void { ExternalInterface.call( "function (name,value) " + "{ " + " var Days = 30; " + " var exp = new Date();" + " exp.setTime(exp.getTime() + Days*24*60*60*1000); " + " document.cookie = name+ '='+ escape (value) + ';expires=' + exp.toGMTString();" + " }" ,name,value); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | <?xml version= "1.0" encoding= "utf-8" ?> <s:Application xmlns:fx= "http://ns.adobe.com/mxml/2009" xmlns:s= "library://ns.adobe.com/flex/spark" xmlns:mx= "library://ns.adobe.com/flex/halo" xmlns:code= "http://code.google.com/p/flexlib/" > <s:states> <s:State name= "maxState" /> <s:State name= "minState" /> </s:states> <s:layout> <s:BasicLayout/> </s:layout> <fx:Script> <![CDATA[ import mx.controls.Alert; import net.shopin.service.*; import net.shopin.vo.SysUserVO; import net.util.ShareScript; private var sysUser:SysUserVO = null ; //公共变量 private var shareFunc:ShareScript = new ShareScript(); //监听用户的键盘回车事件 private function keyHandler(event: KeyboardEvent): void { if (event.keyCode == 13 ) { login(); } } //退出系统 private function logOut(): void { logs.visible = true ; shareFunc.clearShare(); resetHandle(); } //用户登录 private function login(): void { if (username.text== "" || password.text== "" ) { Alert.show( "用户名和密码不能为空" ); } else { var service:ReportService = new ReportService(resultLogin); service.login(username.text); } } //登录回调信息 private function resultLogin(data: Object ): void { sysUser = data as SysUserVO; if (sysUser.loginName != null && sysUser.userPassword == password.text) { logs.visible = false ; if (rec.selected) { shareFunc.writeShare(username.text, password.text); } setMyCookie(sysUser.loginName,sysUser.userPassword); } else { password.text = "" ; Alert.show( "用户名或密码有误,请重新输入!" ); } } //重置 private function resetHandle(): void { username.text = "" ; password.text = "" ; } //向客户端写入cookie信息 private function setMyCookie(name: String ,value: String ) : void { ExternalInterface.call( "function (name,value) " + "{ " + " var Days = 30; " + " var exp = new Date();" + " exp.setTime(exp.getTime() + Days*24*60*60*1000); " + " document.cookie = name+ '='+ escape (value) + ';expires=' + exp.toGMTString();" + " }" ,name,value); } ]]> </fx:Script> <mx:Panel x= "414.5" y= "274" width= "387" height= "305" layout= "absolute" title= "管理员登录" fontFamily= "Georgia" fontSize= "14" id= "logs" visible= "true" width.maxState= "353" height.maxState= "268" x.maxState= "411.5" y.maxState= "274" title.maxState= "管理员登录" > <mx:Label x= "41.5" y= "33" text= "用户名" fontWeight= "bold" /> <mx:Label x= "51.5" y= "81" text= "密码" fontWeight= "bold" /> <mx:TextInput x= "94.5" y= "33" id= "username" width= "174.5" /> <mx:TextInput x= "94.5" y= "79" id= "password" displayAsPassword= "true" width= "174.5" /> <mx:Button x= "96.5" y= "211" label = "登录" id= "btnLogin" click= "login();" x.maxState= "97.5" y.maxState= "175" /> <mx:Button x= "198.5" y= "211" label = "重置" id= "btnReset" click= "resetHandle()" x.maxState= "199.5" y.maxState= "175" /> <mx:CheckBox id= "rec" x= "96.5" y= "166" label = "记住用户名密码" height= "37" x.maxState= "97.5" y.maxState= "126" /> </mx:Panel> </s:Application> |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步