SYDNEY GANHO (60 pts)

LEANDRO AMANO (83 pts)

RODRIGO AMARAL (56 pts)

SASHA GUDEY (235 pts)

IRAPUAN MARTINEZ (45 pts)

HELEN TRIOLO (444 pts)

RICARDO TEIXEIRA (40 pts)

DANIELA PIRES (86 pts)

DENIS CARAVALHO (85 pts)

JOTA LAGO (40 pts)

MUZAK (45 pts)

MARLOS ALVES CARMO (90 pts)
Treinamento PontoFlash de Flash e ActionScript

Como dar um fade (alpha) num movieclip clicando num botão?

Tenho dúvidas de como fazer um Load Movie.

Como calcular a raiz quadrada de um número?

Gostaria que vocês me dessem uma dica, quando usar e quando não usar o loading.

Qual é o comando para quando um HTML abrir redirecione para outro automaticamente?

Como fazer um load individual para cada frame de meu filme?

Preciso desenhar um coração no flash.

Jogo Genius.

Problemas com manter duas instâncias duplicadas na mesma cena.

Como fazer um autoRun para um executável do Flash?

Problemas com redimensionamento e ponto de registro.

Preciso de um timer que faça variar o valor de um campo dinâmico.

Importar variáveis de um TXT, com loadVars em um compontente scrollBar (rolagem).

Quero um botão com duas funções diferentes.
Criação de um CD híbrido

Como eliminar vozes de um arquivo Wav.

Quadro comparativo: Fireworks ou Photoshop

Níveis dentro do Flash - Load Movie e Load Variables (segunda parte)

A história do Flash.

Action Script 2.0 (Primeira Parte)

TV Scan Lines - Fireworks

Bookmak (Adicionar a favoritos).

Imagens transparentes usando PhotoShop, Fireworks e Flash.

LOAD vs XMLConnector, vantagens e diferenças no carregamento do XML

Integrando o Flash com Arquivos de Vídeos II.

Local Shared Objects segunda parte.
Timer

Alfabetar

Texto com pause

Scroll velo over

Relógio

Altex

Keypress

Espelho

Drummer

Preloader com percent

Type sound

Munu ampliando
HOME | TUTORIAIS
Limitar por IP? Porque não utilizar o Shared Object do Flash?
por Fernando Vieira

Muitas vezes precisamos limitar o acesso por um determinado tempo, ou impedir que um usuário vote mais de 1 vez durante um período de tempo. Mas como fazer isso? Veja como implementar uma solução utilizando o Shared Object, presente a partir do Macromedia Flash MX.

Introdução

Se você já pensou em limitar o acesso de algum usuário a um sistema de votação, por exemplo, utilizando cookie já se perguntou: "Mas e se o cara limpar os cookies?". Aí, você ,todo esperto, pensa: "Por que eu não limito pelo IP?", mas só que vem aquele seu amigo chato que sempre contraria as suas soluções e diz: "Mas a maioria usa IP Dinâmico!". E agora? Como fazer para limitar o usuário?

Neste artigo nós veremos como utilizar uma solução baseada nos Shared Objects, disponíveis a partir da versão Flash MX (FMX).

Entendendo Shared Object

O Shared Object é um objeto semelhante aos cookies, com uma diferença essencial: ele não é salvo diretório de arquivos temporários do seu browser, nem é excluído quando limpamos os cookies. Isso porque ele fica em um diretório específico do sistema, que varia de plataforma para plataforma. Para saber qual o diretório em seu sistema, localize os arquivos de extensão .sol. Mas note que esse arquivo só será criado após você acessar alguma página que utiliza os Shared Objects.

A sintaxe para o Shared Objects é muito simples, tanto no acesso quanto na criação do objeto.

so = SharedObject.getLocal("meu_cookie");

Note que é SharedObject, com o "S" e "O" em letras maiúsculas. Essa diferenciação é importante ao se trabalhar com o Macromedia Flash MX 2004 (FMX2004), já que ele é case sensitive em relação aos nomes de variáveis, funções e objetos, ou seja, faz diferenciação de maiúsculas e minúsculas. Dessa maneira, a variável nome é diferente de Nome.

Ao invocarmos o método getLocal da classe SharedObject, nosso objeto é instanciado mas não é criado no diretório que mencionei um pouco antes. Para que ele seja criado, é necessário atribuir um valor qualquer através da propriedade data, que é uma coleção de atributos do objeto. Por isso, se precisarmos salvar mais de um valor, basta definir diversos valores para esta propriedade.

so.data.nome = "Fernando Vieira";
so.data.site = "http://antz.com.br";

E se quisermos excluir um Shared Object? Isso é muito fácil! Basta invocar o método clear. Só que este método só está disponível no FMX2004.

so.clear();

Para excluírmos um valor definido no FMX, temos que definir o valor undefined. A partir disso podemos tomar decisões se o cookie já foi definido ou não.

#1 	so = SharedObject.getLocal("visitas");
#2 	if( so.data.visitas == undefined ){
#3 		//É o primeiro acesso
#4 		so.data.visitas = 1;
#5 		trace( "Olá! Esta é a sua primeira visita" );
#6 	}else{
#7 		//Já acessou antes
#8 		so.data.visitas++;
#9 		trace( "Essa é a sua visita #" + so.data.visitas );
#10 	}
#11
#12 	/* Se for a quinta visita, apaga o cookie */
#13 	if( so.data.visitas == 5 ){
#14 		so.data.visitas = undefined;
#15 		trace( "Vamos apagar o seu histórico, ok?" );
#16 	}

A linha 1 instancia o objeto Shared Object. O nome deste cookie é visitas.
As linhas 2-6 verifica se o valor de "visitas" é undefined. Se for, o cookie não foi definido e é a primeira vez que ele está acessando, ou o cookie foi apagado. Então, ele define o valor de "visitas" como 1.
As linhas 6-10 entra são executadas caso o cookie já tenha sido definido. Na linha 8, ele incrementa o valor em 1.
As linhas 13-16 são executadas caso seja a quinta visita.

Na sexta visita, ele vai entrar novamente no bloco da primeira visita, já que definimos o valor de "visita" como sendo undefined.

Agora que já sabemos como o Shared Object funciona, iremos utilizá-lo na prática!

E na prática, como fica?

Um amigo estava desenvolvendo um projeto em PHP, semelhante a esses sites de almas gêmeas (credo!), e iria premiar os cadastros mais acessados. Ele me perguntou como ele iria fazer para restringir o acesso por um determinado perído. No caso dele, o voto só seria computado 1 vez a cada 5h, independente de quantos acessos esse cadastro tivesse.

Inicialmente, ele veio com uma idéia de utilizar cookie e restringir por IP. Eu falei para ele que a maioria das pessoas utiliza IP dinâmico, inclusive eu (isso mesmo, eu sou o amigo chato)! Após pensar um pouco, falei para ele utilizar o Shared Objects para limitar este usuário e como ele não sabia muito de Flash, se é que sabia alguma coisa, eu criei esta solução.

O código ActionScript vai receber uma variável através do FlashVars que é a ID do cadastro. Essa variável vai ser enviada para um arquivo PHP, junto com a data do último acesso. Esse arquivo PHP vai verificar se o período de voto é válido ou não, fazendo as respectivas ações de atualização de banco de dados. Para facilitar o exemplo, iremos gravar em um arquivo .txt a ID do usuário que está sendo visitado. Ah, para dificultar um pouquinho, iremos criar arrays que irão armazenar múltiplos usuários, já que você pode visitar todos os cadastros!

Crie um novo arquivo .fla e salve-o como "visitas.fla".

#1 	/*PEGANDO O VALOR DO ID_CADASTRO, PASSADO POR FLASHVARS*/
#2 	id_cadatro = _root.id_cadastro;
#3
#4 	/*GERANDO NÚMERO RANDÔMICO*/
#5 	rand = Math.ceil( Math.rand()*99999 );
#6
#7 	/*INSTANCIANDO O SHARED OBJECT*/
#8 	so = SharedObject.getLocal("visitas");
#9 	if( so.data.cadastros == undefined ){
#10 		//criando um array de cadastros
#11 		so.data.cadastros = new Array();
#12 	}
#13
#14 	if( so.data.cadastros[id_cadastro] == undefined ){
#15 		//definindo o primeiro acesso
#16 		so.data.cadastros[id_cadastro] = 0;
#17 	}
#18
#19 	//CRIANDO OBJETO LOADVARS
#20 	lv = new LoadVars();
#21 	lv.ultima_visita = so.data.cadastros[id_cadastro];
#22 	lv.id_cadastro = id_cadastro;
#23 	lv.sendAndLoad("verifica_visita.php", lv, "POST");
#24
#25 	lv.onLoad = function(ok){
#26 		if( ok ){
#27 			if( this.atualizado == 1 ){
#28 				trace("Esta visita ao cadastro foi »
					gravada em arquivo texto");
#29 				so.data.cadastros[id_cadastro] = this.expira;
#30 			}else{
#31 				trace("Esta visita não foi gravada »
					em arquivo texto");
#32 			}
#33 		}
#34 	}

A linha 2 pega o valor da variável "id_cadastro", passada por FlashVars.
A linha 5 gera um número randômico para evitar o problema de cache na hora da fazer a requisição.
As linhas 7-12 criam o objeto Shared Object e definem o array cadastros, caso ele ainda não tenha sido criado.
As linhas 14-17 definem o tempo de acesso como 0 se ainda não tiver sido definido. Isso só vai ocorrer na primeira visita do usuário.
As linhas 20-23 criam o objeto LoadVars, definem os valores que serão enviados para o arquivo "verifica_visita.php", e retorna o conteúdo carregado para o objeto LoadVars lv.
As linhas 25-34 são executadas assim que o objeto LoadVars terminar de carregar o conteúdo solicitado na linha 19. Se o valor de atualizado for 1, significa que o tempo de visita era válido e, portanto, foi contabilizado o acesso. Em caso contrário, ele exibe uma mensagem dizendo que o voto não foi contabilizado.

Exporte o arquivo swf e seu código HTML (aquele que tem as tags <OBJECT> e <EMBED> que tornam nosso código xHTML inválido!).

Agora, iremos criar o nosso código PHP que irá fazer a gravação do acesso em arquivo.

#1  	<?php
#2  	$id_cadastro = $_POST['id_cadastro'];
#3  	$ultima_visita = $_POST['ultima_visita'];
#4  	$intervalo = 60*3;
#5  	$limite = time() - $intervalo;
#6 	$expira = time() + $intervalo;
#7 	$data = date("H:i:s");
#8 	$data_proxima = date("H:i:s", $expira);
#9
#10  	if( $ultima_visita <= $limite ){
#11 		$file = fopen("visitas.txt", "a+");
#12  		$str = "O usuário $id_cadastro foi visualizado.\r\n";
#13  		fwrite($file, $str);
#14 		fclose($file);
#15 		echo "&atualizado=1&expira=$expira&";
#16 		exit();
#17 	}
#18 	?>

Ufa, complicou um pouco! Mas se a gente olhar com cuidado, vai ver que não é tão complicado quanto parece!

A linha 2-3 pegam os valores enviados pelo Flash de "id_cadastro" e "ultima_visita".
A linha 4 define o intervalo que o usuário terá que esperar até que seu voto seja novamente contabilizado. Definimos como 3 minutos (60s x 3min).
A linha 5 define o início do limite de acesso. À partir deste horário, o usuário não terá seu voto contabilizado.
A linha 6 define qual o próximo horário de liberação para que o voto seja contabilizado.
As linhas 7-8 definem a hora atual e hora de expiração no formato hh:mm:ss.
As linhas 10-17 são executadas se o horário de acesso do usuário for menor que o limite. Na primeira vez que ele acessa o cadastro, é definido como "0", então, ele terá o valor atualizado, já que o valor de time() é o número de segundos decorridos desde 01/01/1970 00:00:00 GMT, com certeza, maior que 0! Nos próximos acessos, o valor de time() estará gravado no cookie (linha 29 do quadro de ActionScript) e será verificado com o horário atual.

Agora falta muito, mas muito pouco! Basta jogar tudo nosso servidor (o que? você não tem um servidor configurado? aguarde, pois este será meu próximo artigo!). Sua estrutura de diretório terá que ser algo assim:


+ raíz do servidor
|
--- verifica_visita.php
--- visitas.swf
--- visitas.php

Ué? Mas o que é esse arquivo visitas.php? Eu não me lembro de ter criado nenhum arquivo desse!
Você está certo! Mas eu juro que vai ser simples! Abra o arquivo gerado que exibe o Flash (aquele com as tags que invalidam o xHTML!) e salve-o como "visitas.php". Mude o código para enviar a variável através do FlashVars.

 
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
	codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/ »
	swflash.cab#version=6,0,0,0"
	WIDTH="150" HEIGHT="150">
	<PARAM NAME=movie
	VALUE="visitas.swf?id_cadastro=<?=$_GET['id_cadastro']?>">
	<PARAM NAME=quality VALUE=high>
	<PARAM NAME=bgcolor VALUE=#FFFFFF>
	<EMBED src="visitas.swf?id_cadastro=<?=$_GET['id_cadastro']?>" 
	quality=high bgcolor=#FFFFFF  WIDTH="150" HEIGHT="150"
	TYPE="application/x-shockwave-flash"
	PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>

Ao acessar o nosso arquivo, nosso sistema entrará em ação. Abra o browser e digite algo como http://localhost/visitas.php?id_cadastro=1. Note que você deve acessar através do servidor, para que ele interprete o parâmetro id_cadastro. Para ver o resultado, abra o arquivo texto "visitas.txt" que é gerado automaticamente.

Você pode baixar os arquivos deste artigo aqui.

Espero que tenha gostado e até o próximo artigo.

Referências

Shared Objects - Macromedia Flash MX
http://www.macromedia.com/support/flash/action_scripts/local_shared_object/index.html
http://www.macromedia.com/.../actionscript_dictionary648.html
Shared Objects - Macromedia Flash MX 2004
http://livedocs.macromedia.com/flash/mx2004/.../wwhelp.htm?context=Flash_MX_2004&file=00001664.html#wp4003890
Flash Vars
http://www.macromedia.com/support/flash/ts/documents/flashvars.htm
http://www.impossibilities.com/blog/flashvarstip.php
PHP
http://php.net/time
http://php.net/fopen


Devido à reformulação implementada no site, pode ser que você encontre alguns links quebrados. Por favor, ajude-nos a corrigir eventuais problemas nos informando links quebrados
1 comentário


Comentário de mateus gêneses
| 6/8/2012 - 22:01 |
http://weebly.com

Bem cara, no meu caso é o contrario to criando um sistema de login e cadastro. como salvo e boto para poderem criar mais de 1 conta?