Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Percorsi e permessi

Area di azione e di influenza degli Shared Object
Area di azione e di influenza degli Shared Object
Link copiato negli appunti

.getSize

Il metodo SharedObject.getSize();
restituisce le dimensioni in bytes del cookie indicato. Ad esempio:

mioCookie = SharedObject.getLocal("cookie");
dimensioni = mioCookie.getSize()/1024;

assegnerà alla variabile "dimensioni", il peso in kilobytes dello Shared Object cookie.sol.
Per trovare questo valore, il player controlla il peso di ogni variabile salvata in mioCookie.data, e per questo motivo, il processo di recupero può essere anche molto lento.

.deleteAll

Il metodo dovrebbe cancellare tutti gli elementi presenti nell'oggetto data del nostro Shared Object. Dico dovrebbe, perchè sembra non funzionare nel modo previsto. Un sistema molto efficiente, è quello di scrivere una funzione che faccia lo stesso lavoro. Nel primo frame del nostro filmato:

SharedObject.prototype.rimuovi = function(){
    for (var i in this.data){
        delete this.data[i];
    }
};

A questo punto, sarà sufficiente richiamare:

mioCookie.rimuovi();

per cancellare tutti gli elementi presenti nell'oggetto data di mioCookie. Alla chiusura del filmato, verrà in automatico cancellato anche il file *.sol corrispondente (questo a causa del metodo flush).

I percorsi

Riprendiamo adesso più approfonditamente il discorso relativo ai percorsi in cui è possibile salvare lo Shared Object. Consideriamo il filmato con URL:

https://www.html.it/folder1/folder2/movie.swf

e la posizione che assumerà sul nostro computer a partire dalla cartella "Flash Player", il cui percorso è (su win98):

C:WINDOWSApplication DataMacromediaFlash Player

e alla quale da adesso farò riferimento con: ...Flash Player. Se dentro il filmato creiamo un riferimento ad un cookie inesistente con la seguente scrittura:

mioCookie = SharedObject.getLocal("info");

dal momento che non specifichiamo il percorso, il cookie verrà salvato in questa posizione:

...Flash Playerhtml.itfolder1folder2movie.swfinfo.sol

La posizione è determinata, come evidente, dal percorso del filmato sullo spazio web e, nell'ultima cartella, dal nome stesso del filmato con tanto di estensione (movie.swf è una cartella). Se cambiamo il riferimento al cookie in:

mioCookie = SharedObject.getLocal("info", "/");

il cookie apparirà in:

...Flash Playerhtml.itinfo.sol

In questo caso, una semplice barra porta il file *.sol fuori dalla cartella con il nome del filmato, e in particolare nella "root" delle cartelle relative al dominio. Cosa importante da notare, è che qualsiasi filmato in qualsiasi posizione, quando userà il percorso "/" per creare un cookie, creerà quest'ultimo nella posizione:

...Flash Playerdominionome_cookie.sol

Consideriamo un caso ulteriore:

mioCookie = SharedObject.getLocal("info", "/folder1/");

il cookie apparirà in:

...Flash Playerhtml.itfolder1info.sol

e se scriveremo:

mioCookie = SharedObject.getLocal("info",
"/folder1/folder2/");

il cookie apparirà in:

...Flash Playerhtml.itfolder1folder2info.sol

Come già detto precedentemente, il cookie non può essere scritto in una cartella che non fa parte del percorso del filmato (per ragioni di sicurezza). Quindi scrivere:

mioCookie = SharedObject.getLocal("info", "/folder1/inventata/");

non creerà alcun cookie.
Il filmato che risiede, invece, in questa posizione:

https://www.html.it/movie.swf

seguendo il ragionamento visto finora, non ha cartelle in cui scrivere il cookie, perchè nel percorso, a partire dalla root del sito, non ce sono. Quindi potrà scrivere un cookie solo in:

...Flash Playerhtml.itinfo.sol

con lo script:

mioCookie = SharedObject.getLocal("info", "/");

e in:

...Flash Playerhtml.itmovie.swfinfo.sol

con lo script:

mioCookie = SharedObject.getLocal("info");

Il filmato, così come scrive un cookie lo legge, quindi potrà leggere cookie creati solo nelle cartelle determinate dal proprio percorso. La cosa che salta subito all'occhio, quindi, è che più un filmato è annidato all'interno della gerarchia di un sito, più saranno le cartelle in cui potrà scrivere e leggere cookie.

Guardiamo ad esempio i nostri due filmati:

https://www.html.it/folder1/folder2/movie.swf
e
https://www.html.it/movie.swf

Per le cose dette finora, se vogliamo che un cookie scritto dal primo filmato, possa essere letto anche dal secondo, questo dovrà avere come percorso nel getLocal la sola barra "/", che inserirà lo Shared Object in:

...Flash Playerhtml.itinfo.sol

Se invece i due filmati sono:

https://www.html.it/folder1/folder2/movie.swf
e
https://www.html.it/folder1/movie.swf

allora i percorsi comuni saranno due: "/" e "/folder1/", che scriveranno i cookie rispettivamente in:

...Flash Playerhtml.itinfo.sol
e
...Flash Playerhtml.itfolder1info.sol

Bisogna precisare, infine, che quando un cookie viene scritto senza specifica del percorso, e quindi con percorso completo e cartella con nome del filmato, questo potrà essere letto solo dal filmato che lo ha creato.

Esempio conclusivo per l'argomento "percorso".
Scrivendo un nome nel campo di input del primo filmato, potremo leggerlo poi dal secondo, anche se risiedono in diverse cartelle. Questo perchè nei percorsi impostati alla chiamata dello SharedObject.getLocal, i due filmati fanno riferimento alla stessa cartella, nella quale sono annidati entrambi.

Primo filmato

Percorso

https://static.html.it/app/uploads/documenti/guide/img/negatyve_sharedobject/esempio1/esempio1.swf

Codice del pulsante

on(release){
  mioCookie = SharedObject.getLocal("cookie","/guide/img/negatyve_sharedobject/");
  if(mioCookie.data.nome
!= undefined){
    testo.text
= mioCookie.data.nome;
  }else{
    mioCookie.data.nome
= testo.text;
    mioCookie.flush();
  }
}

Esecuzione del filmato

Secondo filmato

Percorso

https://static.html.it/app/uploads/documenti/guide/img/negatyve_sharedobject/esempio2/esempio2.swf

Codice del pulsante

on(release){
  mioCookie = SharedObject.getLocal("cookie","/guide/img/negatyve_sharedobject/");
  testo.text = mioCookie.data.nome;
}

Esecuzione del filmato

Scarica i due filmati

I permessi

Come accennato nella prima lezione, i filmati che appartengono allo stesso dominio, possono leggere i cookie creati da tutti i filmati che hanno influenza sullo stesso sandbox.

Al contrario, i filmati che appartengono a diversi domini, non possono leggere gli uni i cookie degli altri.

L'unico modo per poter accedere ai dati salvati in un cookie da un altro dominio, è caricare uno dei filmati di quest'ultimo, e cercare nel livello o nel target le informazioni necessarie. Ad esempio: https://www.html.it/movieHtml.swf salva nel computer dell'utente un cookie, e di volta in volta lo recupera quando viene riprodotto, con lo script:

mioCookie = SharedObject.getLocal("info");
mioCookie.data.nome = "flash";

Il filmato:

http://www.macromedia.com/movieMacro.swf

carica con il loadMovieNum il filmato https://www.html.it/movieHtml.swf nel livello 1, e cerca il valore di nome (tutto questo nel browser dell'utente, che è l'unica porta di comunicazione tra i due filmati):

loadMovieNum("https://www.html.it/movieHtml.swf", 1);
this.onEnterFrame = function(){
    display.text = _level1.mioCookie.data.nome;
};

Nel campo di testo "display", non apparirà niente. Questo perchè i due filmati fanno riferimento a due diversi sandbox, e per ragioni di sicurezza, uno non può accedere agli Shared Object dell'altro.

Supponiamo invece il caso in cui il filmato https://www.html.it/movieHtml.swf voglia concedere il permesso a http://www.macromedia.com/movieMacro.swf di accedere alle informazioni recuperate dal cookie. Nel primo frame del filmato, basterà inserire:

System.security.allowDomain("macromedia.com");

Quando allora http://www.macromedia.com/movieMacro.swf lo caricherà, nel campo di testo "display" apparirà il testo "flash".

La concessione di questo tipo di permesso, non può essere revocata durante la riproduzione del filmato. Scadrà invece automaticamente alla chiusura del filmato, e dovrà essere riconcessa nuovamente alle successive riproduzioni. Inoltre, il permesso può essere concesso a più domini contemporaneamente:

System.security.allowDomain("ultrashock.com", "flashkit.com", "macromedia.com");

ma per ovvi motivi di sicurezza, questa lista non sarà accessibile in alcun modo, nemmeno al filmato stesso che l'ha generata.

Notazione importante: i tipi di restrizione che valgono per i filmati in rete, appartenenti o meno allo stesso dominio, non esistono per quelli riprodotti in locale. Questi ultimi, possono leggere le informazioni di tutti i cookie e di tutti i filmati, avendo anche risorse illimitate per quanto riguarda lo spazio accessibile su disco.

Ti consigliamo anche