Paylaşılan nesnelerFlash 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ındaPaylaşı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 objelerTanı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:
SharedObject sınıfı hakkındaSharedObject 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. SharedObject sınıfı aşağıdaki yöntemlerden oluşur:
Bu yöntemlere ek olarak, SharedObject nesnelerinde aşağıdaki özellikler vardır:
Bir paylaşılan nesne oluşturmaBir 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:
#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 belirlemeSharedObject 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 eklemeSharedObject öğ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 saklamaDiziler 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 saklamaYazı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. Birden çok paylaşılan nesne oluşturmaAynı 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şturmagetLocal() 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ülemeDeğ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ğiAş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> |
![]() |