SharedObject

在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//Application Data/Macromedia/Flash Player/#SharedObjects////.sol
         o For AIR Applications, C:/Documents and Settings//Application Data//Local Store/#SharedObjects/.swf/.sol
   * Windows Vista
         o C:/Users/username//AppData/Roaming/Macromedia/Flash Player/#SharedObjects///.swf/.sol
   * Mac OS X:
         o For Web sites, Macintosh HD:Users::Library:Preferences:Macromedia:Flash Player:#SharedObjects:::/.sol
         o For AIR Applications, Macintosh HD:Users::Library:Preferences::Local Store:#SharedObjects:.swf/.sol
   * Linux/Unix:
         o /home//.macromedia/Flash_Player/#SharedObjects///.swf/.sol

每个对象都会有一个只读属性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:

  mouseDown="init();"  creationComplete="createUser();">

     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);
      }  
    
    }
  
  ]]>    

 
 

 

部分内容转载自网络:地址忘了,抱歉!

你可能感兴趣的:(Flex,Flash)