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>
|
|
|
|
|