Action Script 3 Cookies; Operações CRUD.


Muitas vezes pensamos, como era facil se pudessemos guardar isto e esta variavel no pc do utilizador, pois bem, isso é possivel e até bem facil, depois de ler um artigo bem interessante, deixo aqui um package que pode simplesmente ser utilizado para gravar e ler dados de um cookie no pc do utilizador… vejam o seguinte código:

Download: Cookie.as
package com.nttlib.util {
 
    
import flash.net.SharedObject;
 
    
public class Cookie {
        
private var _time:uint;
        
private var _name:String;
        
private var _so:SharedObject;
 
        
public function Cookie(name:String = "nttlib", timeOut:uint=3600) {
            
_name = name;
            
_time = timeOut;
            
_so = SharedObject.getLocal(name, "/" );
        
}
 
        
// limpa o cookie quando o seu tempo expirar;
        
public function clearTimeOut():void {
            
var obj:* = _so.data.cookie;
            
if(obj == undefined){
                
return;
            
}
            
for(var key in obj){
                
if(obj[key] == undefined || obj[key].time == undefined || isTimeOut(obj[key].time)){
                    
delete obj[key];
                
}
            
}
            
_so.data.cookie = obj;
            
_so.flush();
        
}
 
        
// verifica o timeout
        
private function isTimeOut(time:uint):Boolean {
          
var today:Date = new Date();
            
return time + _time * 1000 < today.getTime();
        
}
 
        
// busca timeout;
        
public function getTimeOut():uint {
            
return _time;
        
}
 
        
// busca nome do cookie;
        
public function getName():String {
          
return _name;
      
}
 
        
// limpa todos os valores o cookie;
        
public function clear():void {
            
_so.clear();
        
}
 
      
// adiciona item ao cookie( variavel, valor )
        
public function put(key:String, value:*):void {
            
var today:Date = new Date();
            
key = “key_”+key;
            
value.time = today.getTime();
            
if(_so.data.cookie == undefined){
                
var obj:Object = {};
                
obj[key] = value;
                
_so.data.cookie = obj;
            
}else{
                
_so.data.cookie[key] = value;
            
}
            
_so.flush();
        
}
 
        
// elimina item do cookie (variavel);
        
public function remove(key:String):void {
            
if (isExist(key)) {
                
delete _so.data.cookie["key_" + key];
                
_so.flush();
            
}
        
}
 
        
// busca valor do item (variavel);
        
public function get(key:String):Object{
            
return isExist(key)?_so.data.cookie["key_"+key]:null;
        
}
 
        
// Verifica se o cookie existe;
        
public function isExist(key:String):Boolean{
            
key = “key_” + key;
            
return _so.data.cookie != undefined && _so.data.cookie[key] != undefined;
        
}
    
}
}
Download: Cookie.as

Fonte: ntc.cc

Espero que seja util.

Abraço.

Deixe um comentário ou um Trackback
   

7 Comentários

  1. July 14, 2008 às 4:34 pm | Permalink

    Mários este package pode ser utilizado para manter o usuario logado se ele der reload no navegador?

    Obrigado.

  2. July 15, 2008 às 7:13 am | Permalink

    Sim, pode :)

    Basta ao fazer login usar o método do package:

    .put(“identificado”,”ok”);

    e depois verificar sempre esse valor:

    if(.get(“identificado”)==”ok”) //esta identificado
    else {} //não está identificado

    :)

  3. August 15, 2008 às 10:27 pm | Permalink

    Olá Mario,

    Estou tentando usar a classe acima só que quando tento incluir um valor da o seguinte erro:

    //CODIGO
    var trakShared:Cookie = new Cookie(‘trakinasNovo’);
    trakShared.put(‘ilha’, Utils.global.atual);
    trace(trakShared.get(‘ilha’));

    //ERRO
    ReferenceError: Error #1056: Cannot create property time on String.
    at com.trakinas.geral::Cookie/put()
    at trakinas_fla::MainTimeline/trakinas_fla::frame1()

    Voce tem ideia do que pode ser?

    Um abraço

  4. August 16, 2008 às 6:20 am | Permalink

    Está usando flash cs certo? esse erro pode se dever a muitas coisas, mas tente na class onde tem:

    private var _time:uint;
    private var _name:String;
    private var _so:SharedObject;

    colocar tudo como public e tente de novo… (deve funcionar…)

    se não der, vá ao menu:

    File->Publish Setting->Flash->Actionscript 3.0 e desactive o “Automatically declare stage instances” e veja se resolveu….

  5. Brian
    August 22, 2008 às 6:23 pm | Permalink

    Mário, há como capturar o serial do HD ou o número MAC do computador do usuário e armazenar em um sharedObject ?

  6. August 22, 2008 às 6:38 pm | Permalink

    Que eu saiba não… :(

  7. Matheus
    May 19, 2009 às 1:06 pm | Permalink

    Opa…
    estou utilizando a sua classe coockie, gostaria de saber se você pode me informar aonde ele armazena este coockie gravado, pois limpo os coockies no firefox e ele não deleta o que criei

    dsahuidsahuadsiauads

    vlw.

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*

Spam Protection by WP-SpamFree