begin process at 2008 05 17 13:37:18
1 174 040 membres
161 nouveaux aujourd'hui
13 974 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TOUT CE QUE VOUS AVEZ TOUJOURS VOULU SAVOIR SUR LES SHAREDOBJECT


Information sur le tutorial

Catégorie :MX2004: CLASS Date de création : 26/12/2005 05:36:58 Vu : 9 258 fois

Note :
9,64 / 10 - par 14 personnes
9,64 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (31)
Ajouter un commentaire et/ou une note

Description

Reprise et développement de la classe SharedObject. Limitation et avantages. Comment et quand les utiliser? Syntaxe et exemples

Tutorial


    Ce tutorial s'efforce de couvrir toute la classe SharedObject: définition, utilisation et limitation. Il s'adresse à tous ceux qui veulent découvrir cette classe ou à ceux qui veulent maîtriser son utilisation et ses applications.


    SharedObject: c'est une classe, comme la classe Sound ou MovieClip. Son utilisation première est le stockage de données, de tous types, en local, soit sur la machine de l'utilisateur ou sur le serveur. Elle est disponible depuis Flash 6, plus connu sous le nom redoutable de Flash MX.

    L'avantage premier d'un SharedObject est sa versatilité, sa souplesse d'utilisation. On peut l'utiliser pour stocker tout type de variables, on ou off line et sans faire appel à une technologie résidante sur le poste client, tel que PHP ou ASP combiné avec une base SQL ou ACCESS. SharedObject génère un fichier en local, finalement comparable à un fichier texte, mais encodé. (Il semblerait, après quelques recherches, que ce soit proche du C. Si quelqu'un peut apporter son opinion fondée là-dessus, il est la bienvenue.)

    A chaque création d'un SharedObject,Flash va donc générer et sauver un fichier sur le poste du client,fichier dont l'extension est .sol. Nous sommes donc confrontés à deuxparamètres ici: l'autorisation d'écrire sur le poste client, etl'espace alloué pour effectuer cette écriture. Et nous abordons là leslimitations du SharedObject: l'espace dont on peut disposer. Par défaut, Flash aloue 100 Ko sur le poste client pour le stockage de SharedObject. Nous verrons plus loin comment modifier ce paramètre.


Passons maintenant la classe SharedObject en détail

1) syntaxe
    so = SharedObject.getLocal("LeNomDuSO", "/")
  •  getLocal est la méthode invoquée afin de stocker sur le disque du poste client ou sur un serveur le fichier LeNomDuSO.sol.
  •  / représente le chemin de l'enregistrement du SharedObject. Ce paramètre est optionel.



2) nommage (c'est pas très beau ce mot, si vous avez mieux)
on peut attribuer toute sorte de nom à son SharedObject: statique ou dynamique.

ex:
    so = SharedObject.getLocal("UnNom", "/")
        ou encore:
    var NomDynamique:String = "StringLambda"
    so =
SharedObject.getLocal(NomDynamique, "/")    
   
//en fait, le fichier ainsi créé sera: StringLambda.sol



3) usage
l'espace alloué par défaut est de 100Ko, mais il est possible de changer cette valeur. Si vous avez besoin de plus d'espace, utiliser la classe System et la méthode showSettings:
    System.showSettings(1)         
    //l'argument 1 ici ouvrira la fenètre de paramétrage directement sur l'onglet d'allocation d'espace.



4) objet de la classe SharedObject
c'est l'objet data. Il peut être de n'importe quel type: Array, Number, String...
 
ex:
    so = SharedObject.getLocal("MonSo" , "/")
    so.data.Param1 = "100"        
    // l'objet data.Param1 est une chaîne et sa valeur est: "100"

    so.
data.Param2 = 25           
    // l'objet data.Param2 est un nombre et sa valeurest: 25

    so.
data.Param3 = []            
    // l'objet data.Param1 est un tableau non définit

    so.
data.Param4 = UserName.text    
    // ici, l'objetdata.Param4 prendra la valeur qui sera saisie dans le champ de texteUserName.



5) handler
il n'y en a qu'un: onStatus. Qui comme on peut le supposer nous retourne le status du SharedObject.

Il n'y a que 3 status:
  1. en attente ou pending en anglais,
  2. sauvegarde réussie ou true, et enfin
  3. sauvegarge impossible, onStatus retournera alors false.
important
onStatus
ne peut être invoqué qu'avec une fonction qui elle, retournera l'état du SharedObject.

ex:
    msg.html = true               
    // ce champ de texte va nousafficher le status du SharedObject
    // le format html offre plus de fonctions que le format text
    msg.multiline =
true               
    so = SharedObject.getLocal("MonSo" , "/")
    so.onStatus = function(EtatDuSo:Object){
    //création de la fonction qui va nous retourner l'état du SharedObject
    for (var i in EtatDuSo){
        msg.htmlText += i + "\t" + EtatDuSo[i]    
        //affichage de l'état du SharedObject
        }
    msg.htmlText +=
    }

Puisque nous n'avons toujours pas cherché à sauvegarder unSharedObject, pour l'instant cette instruction n'a pas été initiée. Pour cefaire nous allons utiliser la méthode flush().



6) méthodes
    La première et celle sans qui rien n'arrive est la méthode flush(), quiindique à l'application qu'il faut sauvegarder vos différents data.Par défaut, le SharedObject sera flushé lors de la fermeture de votreapplication. Ce n'est donc pas une instruction obligatoire mais leflush peut aussi être déclanché par un onPress.

ex:
    so =
SharedObject.getLocal("MonSo" , "/")
    so.data.param1 = 25

    this.FlushBouton.onPress = function(){
    // bien evidemment, cela aurait aussi fonctionné avec un onRelease...
        so.flush()
    }

le fichier MonSO.sol a été créé, et la valeur 25 a été passée à l'objetdata.param1. Lorsque vous appelerez votre SharedObject, c'est cettevaleur que vous récupererez pour l'objet data.param1. Ainsi:

    so = SharedObject.getLocal
("MonSo" , "/")
    LaTailleDuNainDeJardin = so.data.param1    
    // ici, donc 25

bien sûr, les combinaisons sont multiples:
   
so = SharedObject.getLocal("MonSo" , "/")
    LaTailleDuNainDeJardin.text = so.data.param1 + " cm"    
    // affichera dans le champ LaTailleDuNainDeJardin: 25 cm

on peut aussi spécifier la taille en octet à "flusher", ou en fait, lataille que l'on désire attribuer au SO lors de sa création, et plustard de sa mise à jour: Soit:

   
so = SharedObject.getLocal("MonSo" , "/")
    so.data.param1 = 25
    so.flush(1000000)                      
    // alloue 1 Mo pour le stockage du SO. ici, sil'utilisateur n'a pas changé ses paramètres
    // par défaut, la fenêtre deparamétrage du player apparait et demande si l'utilisateur
    // veut alloué plus d'espace à lasauvegarde de données.


    La deuxième méthode est clear() qui on s'en doute, va purger leSharedObject.
Attention,elle va juste le purger, à savoir rendre nulltous les data du SharedObject, mais le fichier existe toujours et doncle SharedObject aussi, ainsi que son référencement.

ex:
   
so = SharedObject.getLocal("MonSo" , "/")
    so.clear()                          
    // la référence vers MonSO est toujours active et lefichier MonSO.sol existe toujours

    Enfin, voici la moins utilisée des méthodes: getSize(). Elle retournela taille en bytes la taille du fichier SO. Or, pour ce faire, elle vaparcourir chaque objet, donc chaque data. plus vous avez sauve de data,plus le processus sera long et consommera des ressources systèmes.Macromedia recommande son utilisation qu'en cas de besoin trèsspécifique, à vous de voir.

ex:
   
so = SharedObject.getLocal("MonSo" , "/")
    var ByteSO:Number = so.getSized()
    trace("la taille de votre objet est de: " +
ByteSO)


***********************************************************************
  

    Voilà pour la théorie, les utilisations peuvent être de toutes sortes:sauvegarde d'un score, paramétrage d'une application, ou encorestockage de données et archivage d'états d'un objet, couleur, taille ouposition. a nouveau, le principal intérèt de la classe SharedObjectréside dans son utilisation offline, permettant de sauver et derécupérer des données hors plateforme technologique.

    Entraînez-vous à utiliser SharedObject pour réaliser un compteur depassage sur un site ou encore un journal de bord à entrées multiples.si les avis sont favorables, ces deux exemples seront mis en ligne d'ici8 jours, ce qui vous laisse le temps de plancher dessus.

    Merci. Et bon SharedObject!  

 


  • signaler à un administrateur
    Commentaire de on_drag_on le 26/12/2005 12:28:59

    :-(

  • signaler à un administrateur
    Commentaire de on_drag_on le 26/12/2005 15:18:11

    nan! je rigole :-) voilà un tuto très utile vu que la question du sharedObject est souvent posée.
    merci!
    (//)

  • signaler à un administrateur
    Commentaire de cortoh le 26/12/2005 15:21:13

    ah attention, drag_on,pas de:  :) !!!!

  • signaler à un administrateur
    Commentaire de cortoh le 26/12/2005 16:13:06

    et desolé pour l a mise en page ou les problèmes d'espace entre les mots, j'ai du totu faire dans l'interface de chargmenent du tuto de FlashKod! dur dur d'faire un tutoriel!

  • signaler à un administrateur
    Commentaire de cortoh le 30/12/2005 06:58:38

    bon, je voulais vous remercier pour tous vos commentaires tres constructifs. j'ai l'air aigri la? bof, non, juste l'envie de faire mieux au prochain coup, apres tout, les tutos, c'est pour tout le monde.

  • signaler à un administrateur
    Commentaire de Blacknight91titi le 02/01/2006 20:38:57

    Merci beaucoup pour ce tuto, je comprend mieux son fonctionement.

    Petite précision :
    1 Mo n'est pas égale a 1 000 000 octect mais 1 048 576 octets. (1 Ko = 1024 octect)

    Voila voila
    10/10

    Blacknight

  • signaler à un administrateur
    Commentaire de cortoh le 02/01/2006 21:59:36

    c'est tres juste, et les approximations peuvent etre parfois sources d'erreur. et quitte a etre precis, autant l'etre jusqu'au bout! content en tout cas de t'avoir apporte eclaircissements sur le sujet, car la classe SharedObject peut se reveler rapide et facile a mettre en place et d'utilites diverses et variees...

    bon le 10, c'est top, je l'avoue.

  • signaler à un administrateur
    Commentaire de cortoh le 04/01/2006 18:24:45

    dernier point: j'avais promis deux additifs au tuto, un Journal de Bord, et un compteur de passage sur un site. malheureusement, je suis un peu bouscule en ce moment, et en plus, je prepare un autre tuto sur la classe BitmapData, grande avancee flash et dont les applications sont sans limite (enfin presque, hein, faut pas pousser!). donc si vraiment vous etiez interesses par les exemples sur les SharedObject, MP moi, ou allez sur le net, il y en a plein.

    merci et bon flash!

  • signaler à un administrateur
    Commentaire de doudou3158 le 05/01/2006 18:35:23

    C'est vrai qu'il est vachement bien ce tuto 10/10 voila et dire que tu as hésité avant de le mettre en ligne.

  • signaler à un administrateur
    Commentaire de _benjy le 08/01/2006 17:04:12

    ouaip bon tuto ... merci ;)
    ca fait plaisi de voir des gents qui font de jolie tuto propre et clair, thx pour le boulot j'suis sur que ca va en aider plus d'un
    ++

  • signaler à un administrateur
    Commentaire de cortoh le 10/01/2006 00:30:43

    doudou, juste une precision: a l'epoque ou j'hesitais, j'avais pas encore elabore mon tuto dans sa version finale..

    merci pour le 10... la note maxi, ca m'a toujours derange... mais je suis un perfectioniste ...

  • signaler à un administrateur
    Commentaire de doudou3158 le 10/01/2006 20:46:54

    le 10 c'est pck c'est comme meme un tuto de bonne qualité et sa se voit qu'il na pas était fait en 10s je ne sais pas exactement cb de temps tu a passé mais rien que de mettre des couleur sa aide beaucoup et c'est long moi jdi bon travail = bonne note

  • signaler à un administrateur
    Commentaire de truantva le 15/02/2006 16:39:55

    salut c'est pour savoir si tu peux mettre un exemple et le code source qui va avec . merci

  • signaler à un administrateur
    Commentaire de cortoh le 15/02/2006 18:03:31

    oui, bien sur, pas de soucis pourposter un exemple, mais as tu un besoin precis deja formule? autant faire d'une pierre 2 coups.

  • signaler à un administrateur
    Commentaire de truantva le 16/02/2006 17:55:30

    ben c'est pour voir comment ca marche puis j'adapterais moi même par la suite merci qd même.
    donc voila si tu peux poster le code et l'exemple qui demanderai le nom le prenom et l'adresse e-mail. merci a++

  • signaler à un administrateur
    Commentaire de truantva le 16/02/2006 17:56:13

    ben c'est pour voir comment ca marche puis j'adapterais moi même par la suite merci qd même.
    donc voila si tu peux poster le code et l'exemple qui demanderai le nom le prenom et l'adresse e-mail. merci a++

  • signaler à un administrateur
    Commentaire de cortoh le 17/02/2006 02:30:22

    euh, c'est quoi le rapport avec la choucroute? je crois que tu parles plus d'une integration via php, la... sinon, ca pourrait donner ca:
    so = SharedObject.getLocal("Profile" , "/")
    if((name.text != undefined)&&(email.text != undefined)&&(firstname.text != undefined)){
       so.data.name = name.text
       so.data.firstname = firstname.text
       so.data.email = email.text
       so.flush()
    }else{
       so.data.name = "inconnu"
       so.data.firstname = ""
       so.email = ""
       so.flush()
    }
    if(so.data.name == "inconnu"){
    this.welcomeMsg.text = "vous n'avez pas declare votre compte!"
    }else{
    this.welcomeMsg.text = "Bonjour" + so.data.firstname + " " + so.data.name
    }
    enfin, bon, c'est pas du tout le type d'application a faire avec cette classe.

  • signaler à un administrateur
    Commentaire de Blacknight91titi le 17/02/2006 08:14:49

    Moi je pense que Truantva tu ne te foule pas trop...
    Le tuto est vraiment bien élaboré, point par point, étape par étape et tu demande un exemple alors Cortoh en fournit déja pas mal dans le tuto.
    Prend la peine de bien lire et comprendre le tuto et tu vera que sa passera tout seul.

    Blacknight

  • signaler à un administrateur
    Commentaire de cortoh le 17/02/2006 09:53:32

    c'est vrai, a quoi ca sert que ducroc, il se decarcasse?! et pis, faut comprendre l'usage d'un SO: celui d'un stockage, localement, d'un ensemble de donnees. tres proche d'un cookie, donc. l'utilisation que tu sembles vouloir en faire, celle d'un formulaire, est plutot peu recommandee.

  • signaler à un administrateur
    Commentaire de Safireo le 21/03/2006 19:41:53

    je poste une question posée sur le forum :

    Pour un système d'identification, j'utilise sharedobject.
    Sur ma page, j'ai deux swf totalement indépendants : logo.swf et admin.swf.

    //L'utilisateur s'enregistre à partir de logo.swf :
    cookie = SharedObject.getLocal("cookie","/");
    cookie.data.adresseemail=donnee.adresseemail;
    cookie.data.motdepasse=donnee.motdepasse;
    cookie.flush();

    //Quand il charge admin.swf, le document vérifie son identité
    ***
    var cookie:SharedObject = SharedObject.getLocal("cookie","/");
    verification1=cookie.adresseemail;
    verification2=cookie.motdepasse;

    Si les informations récupérées ne sont pas bonnes, le document propose à l'utilisateur de se reconnecter dans le document logo.swf qui est ouvert en même
    que admin.swf puis de cliquer sur un bouton "actualiser" qui renvoie au début de la procédure de verification, là ou j'ai mis les trois étoiles.

    LE PROBLEME ?
    Tous fonctionne à part ceci : quand l'utilisateur se réenregistre dans logo.swf sans recharger logo.swf, admin.swf qui fait appel au même sharedobject prend pas en compte les modifications quand je clique sur "actualiser". si je recharge admin.swf, les modifications sont prises en compte. J'ai l'impression qu'à partir du moment ou on ouvre le cookie dans un document, la variable est insensible aux modifications effectuées par un document extérieur.

    Savez vous comment réactualiser le cookie sans recharger le document ?

    merci beaucoup,
    safireo

  • signaler à un administrateur
    Commentaire de cortoh le 22/03/2006 10:55:32

    utilises une boucle, ou un setInterval pour rafraichir en temps reel  la valeur des data dans ton SharedObject.
    dans ton admin.swf:

    function CheckLogin(){
    var cookie:SharedObject = SharedObject.getLocal("cookie","/");
    verification1=cookie.data.adresseemail;
    verification2=cookie.data.motdepasse;
    }
    setInterval(CheckLogin, 1)

    ca devrait le faire...

  • signaler à un administrateur
    Commentaire de Safireo le 22/03/2006 18:27:31

    c'est pas vraiment un problème de rafraichissement dans le temps : ça se réactualise même après un temps très court si je recharge le document swf tandis que ça ne se recharge pas même après un temps très long si je fais un simple gotoAndPlay pour relire le code sans recharger le document.

  • signaler à un administrateur
    Commentaire de cortoh le 22/03/2006 23:04:18

    as tu essaye avec le code que je t'ai indique? bon enfin, si tu as trouve la solution, c'est le principal. bon courage! :)

  • signaler à un administrateur
    Commentaire de Safireo le 22/03/2006 23:22:50

    Ça ne marche pas : d'ailleurs, sans setInterval, en cliquant simplement sur un bouton de réactualisation qui renvoyait à la vérification de l'identité, ça ne marchait pas. en cliquant toutes les secondes, c'était l'équivalent de setInterval, c'est donc logique...

    en fait, j'ai deux solutions alternatives :

    la première :
    cookie.redirige=1;
    cookie.adresse=masequence;
    _level0.loadclip("admin.swf",1)
    et dans le code de admin.swf, je vérifie si cookie.redirige=1 et je renvoie alors sur masequence puis je remets cookie.redirige=0;

    la seconde :
    localConnection. expliqué par bali balo sur http://www.flashkod.com/code.aspx?ID=35707

    merci pour ton aide cortoh !

  • signaler à un administrateur
    Commentaire de swanybubble le 05/09/2006 18:00:05

    Comment je peux faire pour envoyer les valeurs stockée dans mon cookies vis des variables et les récupèrer en javascript sur une page HTML ?
    Je récupère les données contenu dans mon cookies
    _root.cookies = SharedObject.getLocal("Toto","/");
    para1 = root.cookies.data.valeur1;
    para2 = root.cookies.data.valeur2;
    para3 = root.cookies.data.valeur3;
    je ne sais pas comment les passer pour les récupèrer dans ma page en js
    Merci pour votre aide

  • signaler à un administrateur
    Commentaire de williamyox le 13/09/2006 22:29:02

    c'est très bien expliqué...
    Mais il y à un chose que je n'arrive pas à faire, je m'explique.

    je voudrais faire un sharedObject pour que si dans mon .sol
    il y ai par exemple :
    param=1 aller à l'etiquette par1
    param=2 aller à l'etiquette par2

    je pense bien que l'on utilise le gotoAndPlay
    le if et le else...
    mais là je bloque pour mettre ca en forme!
    j'ai bien essayé de modifier des fla de demo trouvé sur des sites
    mais ils etaient sur un chargement de texte ou bien de localisation de positions de symbole (en x et y).

    Ayez pitié d'un jeune action scripteur auto-didact.
    merci beaucoup. :-)

  • signaler à un administrateur
    Commentaire de williamyox le 17/09/2006 11:18:23

    Ya plus personne sur ce post ???

  • signaler à un administrateur
    Commentaire de mcabdel le 20/04/2007 14:10:50

    Excellent ce tuto !

    Grace à toi j'ai reussi à faire en 2 minutes ce que mon boss m'a demandé !

    je suis trop content, merci beaucoup !

    Maintenant il faut que j'envoi le contenu du so en xml vers une page web... (vive la technologie moderne)

    Abdel.

  • signaler à un administrateur
    Commentaire de ismaww1 le 28/08/2007 16:01:00

    Très bon Tut. , j'aimerai un complément d'information ;)
    Créer un .so à partir d'un .swf en ligne, je maitrise.
    Créer un .so à partir d'une projection .exe en local, ca va aussi :)
    MAIS:
    récupérer en ligne un .so créé par un .exe en local ou/et
    récupérer un .so en local créé par un .swf en ligne

    j'y arrive pas, quelqu'un à une idée ????
    Merci d'avance

  • signaler à un administrateur
    Commentaire de zarkofaj le 03/11/2007 08:54:09

    Récupérer ? . . . Il faut que tu interroge ton programme, c'est possiblement la seule façon de faire. Il n'est pas de coutume de récupérer un 'sharedObject'. Son but étant de stocker de l'infos sur le disque dur. Seulement il est de coutume de communiquer avec le 'sharedObject' et de changer les informations.
    if(monSo.data == 'undefined') {
      
       // -->
          monSo.data = [];
       // <--
    }

    [ Il est bien préférable de stocker un objet plutôt qu'une information ]. Bon d'accord je n'ai pas écrit en CS3. Mais en MX. Seulement il est bien d'en faire une classe, un 'Array()' vide autant que possible. Tout objet vide est dinamique. La récupération n'étant pas essentielle, sauf si . . . tout dépand du but rechercher. Comme le jeu par exemple.

  • signaler à un administrateur
    Commentaire de looooobna le 14/12/2007 11:32:03

    merci pour le tuto
    il m'a beaucoup servir
    please un script d'enregistrement de score de +++utilisateurs avec sharedobject

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Boutique

Boutique de goodies CodeS-SourceS