SharedObject

Filed Under Flash & Flex 

FlashActionScript 1.0; Flash Player 6

Yksi tärkeä ominaisuus kaikkien sovellusten toiminnan ja käytettävyyden kannalta on kyky tallentaa tietoja tai asetuksia käyttäjän koneelle. Miltei jokaisessa koneella olevassa ohjelmassasi on olemassa asetuksia, joita voit muokata haluamiksesi. Nämä asetukset voit sitten tallentaa koneen muistiin, jotta ne ovat käytettävissä taas kun seuraavan kerran avaat ohjelman. Internetsovellukset tallentavat nämä asetukset ja tiedot “cookie”-tiedostoihin (eväste). Cookie-tiedostot ovat monelle tuttuja mm. JavaScriptistä ja serveripuolen kielistä. Flashissa cookien virkaa toimittaa SharedObject- objekti.

Sisältö

HUOM!
Kutsun tässä artikkelissa Flashin tallentamia tiedostoja evästeiksi, vaikka varsinaisista evästeistä ei siis olekaan kyse. Tämä siksi, että tekstin ymmärtäminen olisi helpompaa.

SharedObjectin käyttö

Toisin kuten useiden muiden objektien luonnissa, SharedObjektin luomiseen ei käytetä “perinteistä” konstruktorimetodia. Sen sijaan kutsutaan staattista getLocal()-metodia, joka palauttaa uuden SharedObject-objektin.

Staattiset metodit:
On olemassa joitain metodeja, joita kutsutaan suoraan luokasta. Metodin käyttöä varten ei siis tarvitse luoda erillistä instanssia. vrt. Mouse.hide(); Mouse.show();

GetLocal()-metodi sallii kaksi parametria: SharedObject-objektin nimen sekä polun SWF-tiedostoon, joka luo objektin. Ensimmäinen parametri on pakollinen, koska kaikkilla objekteilla tulee olla nimi. Toinen parametri, joka on valinnainen, on lähinnä yhteydessä objektin jakamiseen monien esitysten kesken.

Eli luodaksemme SharedObject-objektin nimeltään “so”, joka tallentaa käyttäjän koneelle evästeen nimeltä “www_asetukset”, tarvitaan seuraava koodi:

so = SharedObject.getLocal("www_asetukset");

Tietojen tallentaminen SharedObject-objektiin

Kun objekti on luotu, siihen voidaan tallentaa tietoja. Nämä tiedot voidaan sitten taas tallentaa myöhemmin käyttäjän koneelle.

Jokaisella SharedObject-objektilla on data- ominaisuus. Data- ominaisuus on myös itsessään objekti jolle voit määrittää edelleen uusia ominaisuuksia. Vain data-objektille määritellyt ominaisuudet tallennetaan käyttäjän koneelle. Tämä tarkoittaa sitä, että suoraan itse SharedObject-objektiin sijoitetut ominaisuudet eivät tallennu siis minnekään. Huomaa, myös että edellämainitut ominaisuudet ovat siis itseasiassa tavallisia muuttujia, joihin voidaa sijoittaa arvoja.

so.data.taustaMusiikki = false;
so.data.sukupuoli = "mies";
so.data.taulukko = [1,2,3];

Voit lisätä ominaisuuksi data-objektiin niin paljon kuin haluat. Ja kuten huomaat, tallennettava tietotyyppi voi olla mikä tahansa. Functioiden tallentaminen ei ole kuitenkaan mahdollista.

Evästeen tallentaminen käyttäjän koneelle

Kun halutut tiedot on tallennettu luotuun objektiin, on seuraava vaihe itse tiedon tallentaminen käyttäjän koneelle. Ei syytä huoleen, tämä on koko prosessin helpoin osuus. Itseasiassa sinun ei tarvitse tehdä mitään. Flash-esitys yritää automaattisesti tallentaa evästeen, kun SharedObject-objekti poistetaan. Tämä voi tapahtua muutamissa eri tapauksissa:

  • kun esitys suljetaan
  • kun esitys on suljettu tai korvattu toisella
  • kun objekti poistetaa käyttämällä “delete”-käskyä

On kuitenkin olemassa myös metodi, jonka avulla esityksen voi pakottaa tallentamaan evästeen välittömästi. Flush()-metodin avulla voit tallentaa evästeen poistamatta itse objektia. Metodin käytössä on muutamia merkittäviä etuja edellämainittuihin passiivisiin tapoihin verrattuna. Ensikädessä, edut liittyvät tiedostokokoon.

Jokainen eväste vie luonnollisesti tietyn määrän levytilaa. Oletuksena, Flash samelle domainille evästeet 100kt saakka. Jokainen käyttäjä voi halutessaan korottaa tai laskea sallittua määrää oman Flash playerin asetuksistaan. Eväste tallentuu käyttäjän koneelle siis vain, jos sen koko ei ylitä playerin asetuksiin määriteltyä enimmäiskokoa.

so.flush();

On siis hyvä ottaa huomioon muutama seikka ennen kuin tietoa yritetään tallennetaa. Voit antaa flush()-metodille parametrin, joka määrittelee evästeelle varatun tilan. Tämä tilanne tulee kysymykseen, jos on oletettavaa, että evästeen koko tulee kasvamaan tulevaisuudessa huomattavasti. Parametri annetaan tavuina. Eli yhden megatavun varaaminen kävisi seuraavasti:

so.flush(1048576);

Voit käyttää getSize()-metodia tarkistamaan evästeen koon.

trace(so.getSize());

Toinen huomionarvoinen seikka on tarkistaa, onnistuiko evästeen tallennus. On olemassa kolme vaihtoehtoa, jolloin evästeen tallennus ei onnistu:

  • Käyttäjä on estänyt evästeiden tallennuksen kokonaan (tämä koskee siis vain flash-playeriin tehtyjä asetuksia ei selaimeen). Tässä tapauksessa käyttäjälle ei näytetä edes kehoitetta evästeen tallennuksesta.
  • Käyttäjä on sallinut asetuksissaan rajattoman määrän tallenuksille, mutta levyllä ei ole enää tilaa (tämä on kuitenkin miltei mahdoton tilanne)
  • Käyttäjä vastaa evästeen kehotteeseen kieltävästi

Onneksemme flush()-metodi palauttaa arvon, jonka avulla voidaan seurata tallennuksen tilaa. Se voi palauttaa arvon true, false tai “pending”. True ja false ovat selviä tapauksia, mutta jos metodi palauttaa arvon “pending”, Flash player näyttää käyttäjälle kehotteen evästeen tallennuksesta. Tähän kehotteeseen käyttäjä voi vastata myöntävästi tai kieltävästi. Käyttäjän vastauksen mukaan metodi palauttaa arvon true tai false.

tallennus = so.flush();
if(tallennus == false) message.text = "tallennus ei onnistunut";

Jos käyttäjä on estänyt kaikkien evästeiden tallentamisen, voit ehdottaa asetusten muuttamista.

settingsButton.onRelease = function()
{
   System.showSettings(1);
}

Kun flush()-metodi palauttaa arvon “pending”, haluat luultavasti tietää mitä käyttäjä on vastannut kehoitteeseen. Tähän käytetään SharedObject-objektin onStatus-handleria. Tätä käsittelijää kutsutaan, kun käyttäjä vastaa kehoitteeseen, joko myöntävästi tai kielteisesti. OnStatus-handlerille syötetään parametri joka on objekti. Objektilla on code-ominaisuus, joka sisältää käyttäjän vastauksesta riippuen toisen seuraavista:

“SharedObject.Flush.Failed”
“SharedObject.Flush.Success”

Datan vastaanotto ja lukeminen

Jotta evästeestä olisi hyötyä jälkeenpäin, haluamme tietysti tarkastella tallennetun evästeen tietoja. Oikeastaan osaat jo tehdä sen, koska tämä tapahtuu täysin samalla tavalla kuin objektin luominen eli getLocal()-metodin avulla.

so = SharedObject.getLocal("www_asetukset");

Jos getLocal()-metodi löytää samannimisen evästeen käyttäjän koneelta, se lataa evästeen datan objektiin. Muutoin metodi vain luo uuden objektin.

Domainit ja turvallisuus

Muutamalla sanalla vielä turvallisuudesta.

Flashin tallentamat evästeet ovat käytettävissä ja saavutettavissa vain domainilla, jolla tallennus tapahtui. Tämä siis tarkoittaa sitä, että esitykset muilla domaineilla eivät voi lukea tallentamiasi evästeitä.

Share

Comments

Leave a comment