Paylaşılan nesneler

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Bazen “Flash tanımlama bilgisi” olarak da ifade edilen paylaşılan bir nesne, ziyaret ettiğiniz siteler tarafından bilgisayarınızda oluşturulabilen bir veri dosyasıdır. Paylaşılan nesneler daha çok web tarama deneyiminizi geliştirmek için kullanılır—örneğin, sıkça ziyaret ettiğiniz bir web sitesinin görünümünü kişiselleştirmenize olanak sağlar.

Paylaşılan nesneler hakkında

Paylaşılan nesneler tarayıcı tanımlama bilgileri gibi işlev görür. Kullanıcının yerel sabit sürücüsünde veri depolamak ve aynı oturumda veya daha sonraki bir oturumda bu veriyi çağırmak için SharedObject sınıfını kullanırsınız. Uygulamalar yalnızca kendi SharedObject verilerine erişebilir, ve bunu yalnızca aynı etki alanında çalışıyorsa yapabilir. Veri sunucuya gönderilmez ve diğer etki alanlarında çalışan uygulamaları tarafından erişilemez, ancak aynı etki alanında bulunan uygulamalar tarafından erişilebilir hale getirilebilir.

Tanımlama bilgileriyle karşılaştırılan paylaşılan objeler

Tanımlama bilgileri ve paylaşılan nesneler oldukça benzerdir. Birçok web programcısı tanımlama bilgilerinin nasıl işlediğini bildiği için tanımlama bilgilerini ve yerel SharedObject öğelerini harmanlamak faydalı olabilir.

RFC 2109 standardına bağlı kalan tanımlama bilgileri genellikle aşağıdaki özelliklere sahiptir:

  • Genellikle bir oturumun sonunda varsayılan olarak süreleri dolabilir.

  • Siteye özgü temelde, istemci tarafından devre dışı bırakılabilirler

  • Site başına toplam 300 tanımlama bilgisi ve maksimum 20 tanımlama bilgisi sınırı vardır.

  • Genellikle her biri 4 KB'lık bir boyutla sınırlıdırlar.

  • Tanımlama bilgileri bazen bir güvenlik tehdidi olarak algılanabilir ve bu nedenle, bazen istemci üzerinde devre dışı bırakılır.

  • İstemci tarayıcısı tarafından belirlenmiş bir konumda saklanırlar.

  • HTTP üzerinden istemciden sunucuya iletilirler.

    Paylaşılan nesneler, bunun aksine aşağıdaki özelliklere sahiptir:

  • Süreleri varsayılan olarak dolmaz.

  • Varsayılan olarak, her biri 100 KB'lık bir boyutla sınırlanır.

  • Basit veri tiplerini saklayabilirler (Dize, Dizi ve Tarih gibi).

  • Uygulama tarafından belirlenen bir konumda saklanırlar (kullanıcının ana dizini içinde).

  • Hiçbir zaman istemci ve sunucu arasında iletilmezler.

SharedObject sınıfı hakkında

SharedObject sınıfını kullanarak, kullandığınız bir SharedObject nesnesinin geçerli boyutunu belirlemenin yanı sıra, paylaşılan nesneler oluşturabilir ve silebilirsiniz.

Bir paylaşılan nesne oluşturma

Bir SharedObject nesnesi oluşturmak için şu sözdizimine sahip olan SharedObject.getLocal() yöntemini kullanın:

SharedObject.getLocal("objectName" [, pathname]): SharedObject

Aşağıdaki örnek mySO adlı bir paylaşılan nesne oluşturur:

public var mySO:SharedObject; 
mySO = SharedObject.getLocal("preferences");

Bu işlem, istemcinin makinesinde preferences.sol adlı bir dosya oluşturur.

Yerel terimi paylaşılan nesnenin konumuyla ilgilidir. Bu durumda Adobe® Flash® Player, SharedObject dosyasını istemcinin ana dizininde yerel olarak saklar.

Bir paylaşılan nesne oluşturduğunuzda, Flash Player, sanal alanının içindeki etki alanı ve uygulama için yeni bir dizin oluşturur. Ayrıca SharedObject verisini saklayan bir *.sol dosyası oluşturur. Bu dosyanın varsayılan konumu, kullanıcının ana dizininin bir altdizinidir. Aşağıdaki tabloda bu dizinin varsayılan konumları gösterilmektedir:

İşletim Sistemi

Konum

Windows 95/98/ME/2000/XP

c:/Documents and Settings/username/Application Data/Macromedia/Flash Player/#SharedObjects

Windows Vista/Windows 7

c:/Users/username/AppData/Roaming/Macromedia/Flash Player/#SharedObjects

Macintosh OS X

/Users/username/Library/Preferences/Macromedia/Flash Player/#SharedObjects/web_domain/path_to_application/application_name/object_name.sol

Linux/Unix

/home/username/.macromedia/Flash_Player/#SharedObjects/web_domain/path_to_application/application_name/object_name.sol

#SharedObjects dizininin altında rastgele adlandırılmış bir dizin mevcuttur. Onun altında uygulamayı önce ana bilgisayar adıyla, ardından yolla ve son olarak da *.sol dosyasıyla eşleştiren bir dizin bulunmaktadır.

Örneğin, yerel ana bilgisayarda, /sos adlı bir altdizinde bulunan MyApp.swf adlı bir uygulama talep ederseniz, Flash Player *.sol dosyasını Windows XP'de aşağıdaki konumda saklar:

c:/Documents and Settings/fred/Application Data/Macromedia/Flash Player/#SharedObjects/KROKWXRK/#localhost/sos/MyApp.swf/data.sol
Not: SharedObject.getLocal() yönteminde bir ad belirtmezseniz, Flash Player dosyayı undefined.sol olarak adlandırır.

Varsayılan olarak Flash, etki alanı başına 100 KB'a kadar büyüklüğe sahip yerel olarak kalıcı SharedObject nesnelerini kaydedebilir. Bu değer kullanıcı tarafından yapılandırılabilir. Uygulama, bir paylaşılan nesneye veri kaydetmeye çalıştığında (bu işlem veri boyutunu 100 KB'tan fazla yapar), Flash Player, Yerel Saklama iletişim kutusunu görüntüler ve bu da kullanıcının erişim talep eden etki alanı için daha fazla yerel saklama alanına izin verebilmesini veya bunu engelleyebilmesini sağlar.

Bir yol belirleme

SharedObject dosyası için konum belirtmek üzere isteğe bağlı pathname parametresini kullanabilirsiniz. Bu dosya o etki alanının SharedObject dizinine ait bir altdizin olmalıdır. Örneğin, yerel ana bilgisayar üzerinde bir uygulama talep edip aşağıdakileri belirlerseniz:

mySO = SharedObject.getLocal("myObjectFile","/");

Flash Player SharedObject dosyasını /#localhost dizinine (veya uygulama çevrimdışı ise, /localhost) yazar. Bu işlem, istemci üzerindeki birden fazla uygulamanın aynı paylaşılan nesneye erişebilmesini istiyorsanız kullanışlıdır. Bu durumda, istemci ikisi de etki alanının kökü olan paylaşılan nesneye giden bir yol belirleyen iki Flex uygulaması çalıştırabilir; böylece istemci, aynı paylaşılan nesneye iki uygulamadan da erişebilir. Birden fazla uygulama arasında kalıcılık olmadan veri paylaşmak için, LocalConnection nesnesini kullanabilirsiniz.

Olmayan bir dizin belirlerseniz, Flash Player bir SharedObject dosyası oluşturmaz.

Bir paylaşılan nesneye veri ekleme

SharedObject öğesinin*.sol dosyasına SharedObject nesnesinin data özelliğini kullanarak veri eklersiniz. Paylaşılan nesneye yeni veri eklemek için aşağıdaki sözdizimini kullanın:

sharedObject_name.data.variable = value;

Aşağıdaki örnek bir SharedObject öğesine userName,itemNumbers ve adminPrivileges özelliklerini ve onların değerlerini ekler.

public var currentUserName:String = "Reiner"; 
public var itemsArray:Array = new Array(101,346,483); 
public var currentUserIsAdmin:Boolean = true; 
mySO.data.userName = currentUserName; 
mySO.data.itemNumbers = itemsArray; 
mySO.data.adminPrivileges = currentUserIsAdmin;

Data özelliğine değer atadıktan sonra, Flash Player'a o değerleri SharedObject öğesinin dosyasına yazacak şekilde talimat vermelisiniz. Flash Player'ı değerleri SharedObject öğesinin dosyasına yazmaya zorlamak için SharedObject öğesini kullanın.flush() yöntemi, aşağıdaki gibi:

mySO.flush();

SharedObject.flush() yöntemini çağırmazsanız, uygulamadan çıkıldığı zaman Flash Player, değerleri dosyaya yazar. Ancak bu işlem, verilerin varsayılan ayarları aşması durumunda kullanıcıya, Flash Player'ın verileri saklamak zorunda kalacağı kullanılabilir alanı artırma imkanı sağlamaz. Bu yüzden, SharedObject.flush() öğesini çağırmak iyi bir fikirdir.

Bir kullanıcının sabit sürücüsüne paylaşılan nesneler yazmak için flush() yöntemini kullanırken, aşağıdaki örnekte gösterildiği gibi, kullanıcının Flash Player Settings Manager (www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html) kullanarak yerel depolama alanını açıkça devre dışı bırakıp bırakmadığını kontrol ettiğinizden emin olmanız gerekir:

var so:SharedObject = SharedObject.getLocal("test"); 
trace("Current SharedObject size is " + so.size + " bytes."); 
so.flush();

Nesneleri paylaşılan nesnelerde saklama

Diziler veya Dizeler gibi basit nesneleri SharedObject öğesinin data özelliğinde saklayabilirsiniz.

Aşağıdaki örnek paylaşılan nesneyle etkileşimi kontrol eden yöntemleri tanımlayan bir ActionScript sınıfıdır. Bu yöntemler kullanıcının nesneleri paylaşılan nesneye ekleyebilmesini veya paylaşılan nesneden çıkarabilmesini sağlar. Bu sınıf basit nesneler içeren bir ArrayCollection öğesi saklar.

package { 
    import mx.collections.ArrayCollection; 
    import flash.net.SharedObject; 
 
    public class LSOHandler { 
 
        private var mySO:SharedObject; 
        private var ac:ArrayCollection; 
        private var lsoType:String; 
 
        // The parameter is "feeds" or "sites". 
        public function LSOHandler(s:String) { 
            init(s); 
        } 
 
        private function init(s:String):void { 
            ac = new ArrayCollection(); 
            lsoType = s; 
            mySO = SharedObject.getLocal(lsoType); 
            if (getObjects()) { 
                ac = getObjects(); 
            } 
        } 
 
        public function getObjects():ArrayCollection { 
            return mySO.data[lsoType]; 
        } 
 
        public function addObject(o:Object):void { 
            ac.addItem(o); 
            updateSharedObjects(); 
        } 
 
        private function updateSharedObjects():void { 
            mySO.data[lsoType] = ac; 
            mySO.flush(); 
        } 
    } 
 
}

Aşağıdaki Flex uygulaması gereksinim duyduğu paylaşılan nesne türlerinin her biri için ActionScript sınıfının bir örneğini oluşturur. Sonra da kullanıcı bloglar veya site URL'leri eklediğinde veya kaldırdığında o sınıfta yöntemler çağırır.

<?xml version="1.0"?> 
<!-- lsos/BlogAggregator.mxml --> 
<mx:Application 
    xmlns:local="*" 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    creationComplete="initApp()" 
    backgroundColor="#ffffff" 
> 
    <mx:Script> 
        <![CDATA[ 
        import mx.collections.ArrayCollection; 
        import mx.utils.ObjectUtil; 
        import flash.net.SharedObject; 
 
        [Bindable] 
        public var welcomeMessage:String; 
        
        [Bindable] 
        public var localFeeds:ArrayCollection = new ArrayCollection(); 
 
        [Bindable] 
        public var localSites:ArrayCollection = new ArrayCollection(); 
 
        public var lsofeeds:LSOHandler; 
        public var lsosites:LSOHandler; 
 
        private function initApp():void { 
            lsofeeds = new LSOHandler("feeds"); 
            lsosites = new LSOHandler("sites"); 
            
            if (lsofeeds.getObjects()) { 
                localFeeds = lsofeeds.getObjects(); 
            } 
            if (lsosites.getObjects()) { 
                localSites = lsosites.getObjects(); 
            } 
        } 
        
        // Adds a new feed to the feeds DataGrid. 
        private function addFeed():void { 
            // Construct an object you want to store in the 
            // LSO. This object can contain any number of fields. 
            var o:Object = {name:ti1.text, url:ti2.text, date:new Date()}; 
            lsofeeds.addObject(o); 
    
            // Because the DataGrid's dataProvider property is 
            // bound to the ArrayCollection, Flex updates the 
            // DataGrid when you call this method. 
            localFeeds = lsofeeds.getObjects(); 
            
            // Clear the text fields. 
            ti1.text = '';        
            ti2.text = ''; 
        } 
        
        // Removes feeds from the feeds DataGrid. 
        private function removeFeed():void { 
            // Use a method of ArrayCollection to remove a feed. 
            // Because the DataGrid's dataProvider property is 
            // bound to the ArrayCollection, Flex updates the 
            // DataGrid when you call this method. You do not need 
            // to update it manually. 
            if (myFeedsGrid.selectedIndex > -1) { 
            
localFeeds.removeItemAt(myFeedsGrid.selectedIndex); 
             } 
        } 
        
        private function addSite():void { 
            var o:Object = {name:ti3.text, date:new Date()}; 
            lsosites.addObject(o); 
            localSites = lsosites.getObjects(); 
            ti3.text = '';                
        } 
        
        private function removeSite():void { 
            if (mySitesGrid.selectedIndex > -1) { 
            
localSites.removeItemAt(mySitesGrid.selectedIndex); 
            }       
        } 
 
        ]]> 
    </mx:Script> 
        
    <mx:Label text="Blog aggregator" fontSize="28"/> 
    
    <mx:Panel title="Blogs"> 
        <mx:Form id="blogForm"> 
            <mx:HBox> 
                <mx:FormItem label="Name:"> 
                    <mx:TextInput id="ti1" width="100"/> 
                </mx:FormItem> 
                <mx:FormItem label="Location:"> 
                    <mx:TextInput id="ti2" width="300"/> 
                </mx:FormItem> 
                <mx:Button id="b1" label="Add Feed" click="addFeed()"/> 
            </mx:HBox> 
 
            <mx:FormItem label="Existing Feeds:"> 
                <mx:DataGrid 
                    id="myFeedsGrid" 
                    dataProvider="{localFeeds}" 
                    width="400" 
                /> 
            </mx:FormItem> 
            <mx:Button id="b2" label="Remove Feed" click="removeFeed()"/> 
        </mx:Form> 
    </mx:Panel> 
    
    <mx:Panel title="Sites"> 
        <mx:Form id="siteForm"> 
            <mx:HBox> 
                <mx:FormItem label="Site:"> 
                    <mx:TextInput id="ti3" width="400"/> 
                </mx:FormItem> 
                <mx:Button id="b3" label="Add Site" click="addSite()"/> 
            </mx:HBox> 
 
            <mx:FormItem label="Existing Sites:"> 
                <mx:DataGrid 
                    id="mySitesGrid" 
                    dataProvider="{localSites}" 
                    width="400" 
                /> 
            </mx:FormItem> 
            <mx:Button id="b4" label="Remove Site" click="removeSite()"/> 
        </mx:Form> 
    </mx:Panel> 
    
</mx:Application>

Yazılan nesneleri paylaşılan nesnelerde saklama

Yazılan ActionScript örneklerini paylaşılan nesnelerde saklayabilirsiniz. Bu işlemi, sınıfı kaydetmek için flash.net.registerClassAlias() yöntemini çağırarak yaparsınız. Sınıfınızın bir örneğini oluşturup paylaşılan nesnenizin veri üyesinde saklar ve daha sonra nesneyi okursanız, bir yazılı örnek elde edeceksiniz. Varsayılan olarak, SharedObject objectEncoding özelliği AMF3 kodlamasını destekler ve saklanan örneğinizi SharedObject nesnesinden dışarı çıkarır; saklanan örnek registerClassAlias yöntemini çağırdığınız sırada belirlediğiniz aynı türü korur.

(Yalnızca iOS) Yerel olarak paylaşılan nesnelerin bulutta yedeklenmesini önleme

Yerel olarak paylaşılan nesnelerin iOS bulut yedekleme servisinde yedeklenip yedeklenmeyeceğini denetlemek için SharedObject.preventBackup özelliğini ayarlayabilirsiniz. Bu, yeniden oluşturulabilen veya tekrar indirilebilen ancak çevrimiçi kullanım sırasında uygulamanızın düzgün çalışması için gerekli olan içerik için Apple tarafından gerektirilir.

Birden çok paylaşılan nesne oluşturma

Aynı Flex uygulamasından birden çok paylaşılan nesne oluşturabilirsiniz. Bu işlemi gerçekleştirmek için, paylaşılan nesnelerin her birine aşağıdaki örnekte görüldüğü gibi farklı bir örnek ismi atayabilirsiniz:

public var mySO:SharedObject = SharedObject.getLocal("preferences"); 
public var mySO2:SharedObject = SharedObject.getLocal("history");

Bu işlem, Flex uygulamasının yerel dizininde bir preferences.sol dosyası ve bir history.sol dosyası oluşturur.

Güvenli bir SharedObject oluşturma

getLocal() veya getRemote() öğesini kullanarak yerel ya da uzak bir SharedObject oluşturduğunuzda, bu paylaşılan nesneye erişimin, HTTPS bağlantısı üzerinden teslim edilen SWF dosyalarıyla kısıtlı olup olmadığını belirleyen secure adında isteğe bağlı bir parametre vardır. Bu parametre true değerine ayarlanırsa ve SWF dosyanız HTTPS üzerinden teslim edilirse, Flash Player uygulaması yeni bir güvenli paylaşılan nesne oluşturur veya varolan güvenli paylaşılan nesneye başvuruyu alır. Yalnızca güvenli parametresi true değerine ayarlanmış şekilde SharedObject.getLocal() öğesini çağıran ve HTTPS üzerinden teslim edilen SWF dosyaları tarafından bu güvenli paylaşılan nesne okunabilir veya bu güvenli paylaşılan nesneye yazılabilir. Bu parametre false değerine ayarlanırsa ve SWF dosyanız HTTPS üzerinden teslim edilirse, Flash Player uygulaması yeni bir paylaşılan nesne oluşturur veya varolan paylaşılan nesneye başvuruyu alır.

HTTPS olmayan bağlantılar üzerinden teslim edilen SWF dosyaları tarafından bu paylaşılan nesne okunabilir veya bu paylaşılan nesneye yazılabilir. SWF dosyanız HTTPS olmayan bir bağlantı üzerinden teslim edilirse ve siz bu parametreyi true değerine ayarlamayı denerseniz, yeni paylaşılan nesne oluşturma işlemi (veya önceden oluşturulmuş güvenli paylaşılan nesne erişimi) başarısız olur, bir hata atılır ve paylaşılan nesne null değerine ayarlanır. HTTPS olmayan bir bağlantıdan aşağıdaki kod parçasını çalıştırmayı denerseniz, SharedObject.getLocal() yöntemi bir hata atar:

try 
{ 
    var so:SharedObject = SharedObject.getLocal("contactManager", null, true); 
} 
catch (error:Error) 
{ 
    trace("Unable to create SharedObject."); 
}

Bu parametrenin değerine bakılmaksızın, oluşturulmuş paylaşılan nesnelerin sayısı, bir etki alanı için izin verilen toplam disk alanı miktarı kadar olabilir.

Paylaşılan bir nesnenin içeriklerini görüntüleme

Değerler, data özelliği içinde paylaşılan nesnelerde saklanır. Aşağıdaki örnekte gösterildiği gibi, bir for..in döngüsünü kullanarak paylaşılan nesne örneği içinde her değer üzerinde döngü oluşturabilirsiniz:

var so:SharedObject = SharedObject.getLocal("test"); 
so.data.hello = "world"; 
so.data.foo = "bar"; 
so.data.timezone = new Date().timezoneOffset; 
for (var i:String in so.data) 
{ 
    trace(i + ":\t" + so.data[i]); 
}

Paylaşılan nesneleri ortadan kaldırma

İstemcide bulunan bir SharedObject öğesini ortadan kaldırmak için, SharedObject.clear() yöntemini kullanın. Bu işlem, uygulamanın paylaşılan nesnelerine ait varsayılan yoldaki dizinleri yok etmez.

Aşağıdaki örnek istemciden SharedObject dosyasını siler:

public function destroySharedObject():void { 
    mySO.clear(); 
}

SharedObject örneği

Aşağıdaki örnek, bir Date nesnesi gibi basit nesneleri, o nesneleri el ile serileştirmek veya seri numarasını kaldırmak zorunda kalmadan bir SharedObject nesnesinde depolayabileceğinizi gösterir.

Aşağıdaki örnek sizi ilk defa gelen bir ziyaretçi gibi karşılayarak başlar. Oturumu Kapat'ı tıklattığınızda, uygulama geçerli tarihi paylaşılan bir nesnede saklar. Bu uygulamayı bir sonraki sefer başlattığınızda veya sayfayı yenilediğinizde, uygulama sizi oturumu kapattığınız zamanı gösteren bir hatırlatma ile tekrar karşılar.

Uygulamayı çalışır halinde görmek için başlatın, Oturumu Kapat'ı tıklatın ve ardından sayfayı yenileyin. Uygulama bir önceki ziyaretinizde Oturumu Kapat düğmesini tıklattığınız tarih ve zamanı gösterir. Saklanan bilgileri istediğiniz zaman LSO'yu Sil düğmesine basarak silebilirsiniz.

<?xml version="1.0"?> 
<!-- lsos/WelcomeMessage.mxml --> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="initApp()"> 
  <mx:Script><![CDATA[ 
  public var mySO:SharedObject; 
  [Bindable] 
  public var welcomeMessage:String; 
 
  public function initApp():void { 
     mySO = SharedObject.getLocal("mydata"); 
     if (mySO.data.visitDate==null) { 
        welcomeMessage = "Hello first-timer!" 
     } else { 
        welcomeMessage = "Welcome back. You last visited on " + 
           getVisitDate(); 
     } 
  } 
 
  private function getVisitDate():Date { 
     return mySO.data.visitDate; 
  } 
 
  private function storeDate():void { 
     mySO.data.visitDate = new Date(); 
     mySO.flush(); 
  } 
  
  private function deleteLSO():void { 
     // Deletes the SharedObject from the client machine. 
     // Next time they log in, they will be a 'first-timer'. 
     mySO.clear(); 
  } 
  
  ]]></mx:Script> 
  <mx:Label id="label1" text="{welcomeMessage}"/> 
  <mx:Button label="Log Out" click="storeDate()"/> 
  <mx:Button label="Delete LSO" click="deleteLSO()"/> 
</mx:Application>