在Web应用中,运行时有些数据需要暂存到本地磁盘中,可以被整个应用获取,也可以在下一次打开应用时获取。Flex中,可以使用共享对象(Shared Object)来实现这样的功能。共享对象有点类似浏览器的cookies,可以为应用暂存一些数据。它与cookies相比,具有如下的优势。
它是不会过期的。
共享的内容,可以由用户指定,可以是字符,可以是数组。
存储位置也可以由应用定义,但必须在用户目录下。
默认情况下,可以使用的存储空间为100K,该数值可以利用Flash Player中的Global Storage Settings panel设定。
只作为本地数据,不会被传输到服务端。该共享对象可以被同一域中的Flex应用共享。
SharedObject类的常用属性如表所示。
属性名 类型 说明
data Object 共享对象总是以熟悉、值的方式存储数据,可以将该data看作属性的集合,在获得共享数据时,总是使用data属性名获得。
size unit 当前共享对象数据的大小,以bytes为单位
SharedObject类的常用方法包括创建共享对象、删除共享对象等,如下所示。
clear():清除共享对象数据。
flush():将共享对象写入客户端的文件中。
getLocal():该方法用来获取共享对象,其接口如下所示:
public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject
创建共享对象不能使用MXML,只能在ActionScript中创建。创建共享对象时使用getLocal()方法,该方法接口如下所示,其中pathName为可选项。
SharedObject.getLocal("objectName" [, pathname]): SharedObject
下面的例子创建了一个共享对象myShare。
public var myShare:SharedObject;
myShare = SharedObject.getLocal("myData");
在创建了共享对象后,需要为共享对象进行赋值,格式如下所示:
sharedObject_name.data.variable = value;
例如下面的代码为userName赋值。
myShare.data.userName = “silence”;
删除共享对象时,需要使用ShareObject()类中的clear()方法。
mySO.clear();
本地共享对象有时被称作“Flash Cookie”,它是一个数据文件,可以由所访问的站点在您的计算机上创建。在Flash中提供了下面的操作本地对象的方法:
SharedObject.clear() 删除本地共享对象;
SharedObject.flush() 立即把共享对象数据写入本地文件;
SharedObject.getLocal() 创建或连接本地共享对象;
SharedObject.getSize() 取得本地共享对象的指定大小数据。
主要看下面的这个方法:
SharedObject.getLocal(objectName [, localPath])
其中objectName是该共享对象的名字,localPath即共享对象所在路径。
// 创建一个本地保存数据的对象
var cookie:Object = SharedObject.getLocal("cookie");
方法会在默认的路径下生成一个cookie.sol文件。文件的默认大小不能超过100k,当然可以通过鼠标右击flash窗口,选择设置来管理或者禁用您的本地共享对象。可以让每个flash独立使用自己的SharedObject,当然也可以做一个全域的SharedObject让所有的swf使用,只要给localPath 赋值 "/"。
在win2k和 win xp中,默认路径为C:/Documents and Settings/username/Application Data/Macromedia/Flash Player/#SharedObjects (username为机器的用户名)
* Windows XP:
o For Web sites: C:/Documents and Settings/
每个对象都会有一个只读属性data,用来存储被存储到“数据特性”中的对象的属性,这些属性可以共享/存储,每一个属性可以是各种基础数据类型(数组,数字布尔值等)对象。现在cookie已经存储在SharedObject中了,以后你可以通过对SharedObject数据属性的存取来实现对cookie的存取。例如:
cookie.data.name = "晓次";
cookie.data.password = "1234";
cookie.data.rememberPassword = true;
共享对象的写入会在应用程序退出时自动执行,也可以通过cookie.flush()强制写入。
在Macromedia的文档中可以知道,SharedObjects只能存储基本的ActionScript或者JavaScript类型(Array, Number, Boolean, String, 等),其实也可以使用SharedObjects来存储用户自己定义的类.而且可以使用几乎全部方法和变量.
例子1:
import flash.net.SharedObject;
import mx.controls.Alert;
/定义一个SharedObject对象
public var so:SharedObject;
public function login():void{
//连接本地共享对象,如果没有则创建一个
so=SharedObject.getLocal("cookie");
//设置共享对象的属性值
so.data.username = txtUsername.text;
so.data.pwd = txtPassword.text;
//把共享对象数据写入本地文件
so.flush();
}
function init():void{
//连接本地共享对象
so=SharedObject.getLocal("cookie");
//如果没有共享对象,则还没有登录
if(so.size==0)
{
Alert.show("你还未登录");
}else{ //否则将值赋给文本框
txtUsername.text = so.data.username;
txtPassword.text = so.data.pwd;
}
}
//获得共享对象的值
public function getLogin():void{
txtUsername.text = so.data.username;
txtPassword.text = so.data.pwd;
}
//清除共享对象
public function clearLogin():void{
txtUsername.text = "";
txtPassword.text = "";
so.clear();
}
]]>
例子2:
import mx.validators.PhoneNumberValidator;
import flash.net.SharedObject;
import mx.controls.Alert;
public static var row:int;
public var myTimer:Timer = new Timer(1000,3);
public var so:SharedObject;
[Bindable]
public var valueName:String="undefined";
[Bindable]
public var valuePwd:String="undefined";
public function createUser():void
{
so=SharedObject.getLocal("cookie");
if(so.size==0)
{
trace("你还未登录");
}
}
public function log():void
{
so.data.username="宋秋平";
so.data.pwd="123";
so.flush();
valueName=so.data.username;
}
function init():void
{
myTimer.reset();
myTimer.start();
myTimer.addEventListener("timer", timerHandler);
trace("登录状态");
}
public function timerHandler(event:TimerEvent):void
{
trace(myTimer.currentCount);
if(myTimer.currentCount==3)
{
trace("3秒钟你未进行认何操作,cookie销毁,取消登录");
so.clear();
trace(so.data.username);
valueName=so.data.username;
trace(valueName);
}
}
]]>
部分内容转载自网络:地址忘了,抱歉!