此工具类可以让我们保存登录以后的信息到硬盘当中去,几个方法特别有用,上代码: /** * This class stores/restores a login/password from the Local Hard Drive * * */ public class LocalCredentials { private var cookie:LocalMap; public function get login():String { return cookie.getValue("login"); } public function get password():String { return cookie.getValue("password"); } /** cookie identifier **/ private var _cookieName:String; public function set cookieName(value:String):void { _cookieName = value; loadCookie(); } public function LocalCredentials(cookieName:String=null) { if (cookieName) { _cookieName = cookieName; loadCookie(); } } private function loadCookie():void { cookie = new LocalMap(_cookieName); if (!cookie.hasKey("login")) { cookie.put("login", null); cookie.put("password", null); } } /** * Save a login and a password string * in a Shared Object * * @param login * @param password **/ public function save(login:String, password:String):void { cookie.put("login", login); cookie.put("password", password); } /** * Clear the cookie **/ public function clear():void { cookie.removeAll(); } } flex当中没有类似于Java当中Map使用键值的类,因此自己封装一个: public class LocalMap implements IMap { /** * @private * The Shared object instance. */ private var sharedObject:SharedObject; private var minDiskSpace:int; /** * Constructor. */ public function LocalMap(id:String, localPath:String=null, minDiskSpace:int=0, encoding:uint=3) { try { sharedObject = SharedObject.getLocal(getValidName(id), localPath); setEncoding(encoding); this.minDiskSpace = minDiskSpace; sharedObject.flush(minDiskSpace); } catch (e:Error) { new Error("You haven't allowed Flash Player to write data on your hard drive"); } } private function setEncoding(encoding:int):void { if (encoding != ObjectEncoding.AMF0 && encoding != ObjectEncoding.AMF3 && encoding != ObjectEncoding.DEFAULT) sharedObject.objectEncoding = ObjectEncoding.DEFAULT; else sharedObject.objectEncoding = ObjectEncoding.AMF3; } private function getValidName(id:String):String { return id.replace(/[~%&/;:/"/'<>/?#]/g, ""); } //------------------------------------------------------------------------ // // Implementation : IMap // //------------------------------------------------------------------------ /** * @inheritDoc */ public function put(key:*, value:*):void { sharedObject.data[key] = value; sharedObject.flush(minDiskSpace); } /** * @inheritDoc */ public function remove(key:*):* { var value:* = sharedObject.data[key]; delete sharedObject.data[key]; sharedObject.flush(minDiskSpace); return value; } /** * @inheritDoc */ public function hasKey(key:*):Boolean { var k:*; var data:Object = sharedObject.data; for (k in data) { if (k == key) return true; } return false; } /** * @inheritDoc */ public function hasValue(value:*):Boolean { var key:*; var data:Object = sharedObject.data; for (key in data) { if (data[key] == value) return true; } return false; } /** * @inheritDoc */ public function getKey(value:*):* { var key:*; var data:Object = sharedObject.data; for (key in data) { if (data[key] == value) return key; } return null; } /** * @inheritDoc */ public function getValue(key:*):* { return sharedObject.data[key]; } /** * @inheritDoc */ public function get keys():Array { var ret:Array = []; var key:*; var data:Object = sharedObject.data; for (key in data) ret.push(key); return ret; } /** * @inheritDoc */ public function get values():Array { var ret:Array = []; var key:*; var data:Object = sharedObject.data; for (key in data) ret.push(data[key]); return ret; } /** * @inheritDoc */ public function removeAll():void { var key:* var data:Object = sharedObject.data; for (key in data) delete data[key]; sharedObject.flush(minDiskSpace); } /** * @inheritDoc */ public function get length():int { var result:int = 0; var key:*; for (key in sharedObject.data) result += 1; return result; } }