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;
}
}
}
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.









6 Comentários
Mários este package pode ser utilizado para manter o usuario logado se ele der reload no navegador?
Obrigado.
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
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
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….
Mário, há como capturar o serial do HD ou o número MAC do computador do usuário e armazenar em um sharedObject ?
Que eu saiba não…