关于flex的cookies---sharedobject

最近有一个需求是关于要获取用户的mac地址,搜索了一通发现,比较普遍的方法就是用ie+调用ActiveX控件,但是他有弊端就是不能跨平台和要用户点击授权才能正常使用。
查看资料html中记录cookies也是一种可行的方法,所以就开始google看flex下有没有对应的类似cookies这样的东西 ---sharedobject
1.介绍
Flash的本地共享对象是在用户机器上实现持久化存储的数据集合。Flash可以从程序中控制这些数据集合,向其中存入或者从中读取大量的信息数据。SharedObject按存放位置可分为本地型(存在客户端)和远程型(存在服务器端)用法有差别,本文中只说存到客户端这种情况,远程型用到的可自己去查看资料
文件的默认大小不能超过100k,当然可以通过鼠标右击flash窗口,选择设置来管理或者禁用您的本地共享对象。可以让每个flash独立使用自己的SharedObject,当然也可以做一个全域的SharedObject让所有的swf使用,只要给localPath 赋值 "/"。
2.存储位置
以 Windows为例,目录为
C:\Documents and Settings\[ username ] \\Application Data\\Macromedia\\Flash
Player\\#SharedObjects\\ [ random character directory name ] , 在Mac OS X 上, 目录为
/Users/[ username ] /Library/Preferences/Macromedia/Flash Player/#SharedObject/ [ random
character directory name ]。随机字符目录命名是为了安全考虑
3.常用方法
SharedObject提供了下面的操作本地对象的方法:
SharedObject.clear() 删除本地共享对象;
SharedObject.flush() 立即把共享对象数据写入本地文件;
SharedObject.getLocal() 创建或连接本地共享对象;
SharedObject.getSize() 取得本地共享对象的指定大小数据。
4.添加属性
共享对象(Shared objects)有个内建的属性data,data属性类型为object,因此可以添加任何信息
5.例子
// 存储username值给example共享对象
example.data.username = "Darron";
可以直接存储ActionScript原生数据类 型:
但需要注意的是,不能存储可视化对象(例如 MovieClips,Sprite,Buttons,TextFields)
6.flush方法用法
flush( )方法有个可选的参数用于指定最小的硬盘空间,单位为字节,默认为0,指用最小的空间
正好存储本地共享对象。
当flush( )方法触发时,它试图把数据写到客户端上,调用结果有三种:
如果用户拒绝存储或Flash播放器因某种原因导致存储失败,该方法会抛出一个 Error。
如果本地存储空间不够导致数据不能保存,该方法返回SharedObjectFlushStatus.FLUSHED。
如果 用户没有分配足够的空间,该方法返回SharedObjectFlushStatus.PENDING。
三种情况中,当flush( )方法返回SharedObjectFlushStatus.PENDING常量时,用户可以选择授权或
拒绝保存数据,当用户做出选择 后,netStatus事件被激活,需要定义一个事件处理函数,当事
件处理函数被触发时,传递进一个类型为 flash.events.NetStatusEvent的事件,检查info.code 属性
值判断用户是同意 (SharedObject.Flush.Success)还是拒绝(SharedObject.Flush.Failed)
这里有个例子调用 flush( )保存数据,处理可能返回的结果:
6-1:例子
var example:SharedObject = SharedObject.getLocal( "example" );
example.data.someData = "a value";
try {
var flushResult:String = example.flush( );
if ( flushResult == SharedObjectFlushStatus.PENDING ) {
example.addEventListener( NetStatusEvent.NET_STATUS, onStatus );
} else if ( flushResult == SharedObjectFlushStatus.FLUSHED ) {
}
} catch ( e:Error ) {
Security.showSettings( SecurityPanel.LOCAL_STORAGE );.
}

function onStatus( event:NetStatusEvent ):void {
if ( event.info.code == "SharedObject.Flush.Success" ) {
} else if ( event.info.code == "SharedObject.Flush.Failed" ) {
}
example.removeEventListener( NetStatusEvent.NET_STATUS, onStatus );
};

6-2:例子
如果确切知道存储数据的大小,可直接给flush( )传参数:
// Request 500 KB of space for the shared object.
var flashResult:String = example.flush( 500 * 1024 );
7:读取客户端数据
在客户端读取这些内容很简单,这些持久性数据都保存在共享对 象的data属性里,因此像下面
的语句这样读就可以了:
// Read the value of exampleProperty from the shared object,
// example, and display it in the Output window.
trace( example.data.exampleProperty );
通过读写数据,我们可以判定用户是不是头 一次访问swf文件:
// Create a shared object and store some data in it
var example:SharedObject = SharedObject.getLocal( "example" );
if ( example.data.previouslyViewed ) {
// The user has already viewed the .swf file before, perhaps
// we skip an introductory help screen here.
} else {
// This is the first time the user is viewing the .swf file
// because previouslyViewed has not yet been set to true.
// Set previouslyViewed to true so that the next time this
// code is run we know the user has been here before.
example.data.previouslyViewed = true;
example.flush( );
}
8:删除对象
正确的方法是使用delete命令,如:
delete example.data.someVariable;
clear( )方法删除整个共享对象,实际上就是删除硬盘中的.sol文件,看下面的代码:
var example:SharedObject = SharedObject.getLocal( "example" );
example.data.someData = "a value";
// Displays: a value
trace( example.data.someData );
// Remove the shared object from the disk
example.clear( );
// Displays: undefined
trace( example.data.someData );
需要注意的地方是清除数据后, 共享对象的引用仍然是有效的,这是还是可以重新添加数据进
行保存。
上面几点基本上说了大部分内容,这边有个很详细的说明
地址:http://www.cnblogs.com/bmate/archive/2011/06/20/2084916.html
转自:http://www.cnblogs.com/bmate/archive/2011/06/20/2084916.html
thanks
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值