Pessoas,
Fiquei 2 dias trabalhando nessa classe. Fiz alguns testes e funcionou como esperado. Fiquem à vontade para Usá-la.
Função: Validar Sessão com FLEX, usando PHP como BACK-END.
Composição: Feita em ActionScript3, a classe abre uma conexão HTTP para um arquivo de validação de sessões em PHP. Se a resposta for positiva, no tunel http, retornará um token que confirmará a autenticidade da sessão. Caso contrário, enviará o cliente para uma tela de Autenticação:
OBS. Essa classe foi testada em sistema baseado em módulos. Para cada modulo use, pelomenos, as linhas abaixo, alterando para o componentes do seu módulo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < ?xml version="1.0" encoding="utf-8"> < | ![CDATA[ import mx.binding.utils.ChangeWatcher; import mx.binding.utils.BindingUtils; import br.com.jpa.fish.classes.*; public function testando():void { var _nameWatcher:ChangeWatcher; var validarsessao:Sessao = new Sessao(); _nameWatcher =BindingUtils.bindProperty(componentedomodulo,"visible" ,validarsessao,"visible"); } ... |
Sessao.as
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package br.com.jpa.fish.classes { import flash.net.URLRequest; import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; public class Sessao { private var UrlAutenticador:URLRequest = new URLRequest("URL DO AUTENTICADOR"); private var UrlSessionPHP:String = "URL DO ARQUIVO PHP QUE VALIDA SESSIONS"; private var token:String = "UM TOKEN QUE DEVE SER O MESMO NO ARQUIVO PHP, CASO A SESSAION SEJA VERDADEIRA"; [Bindable] public var visible:Boolean; //construtor public function Sessao():void{CheckSession()} //Dispara a funcao que trara a resposta da validacao public function CheckSession():void { httpRequest(UrlSessionPHP); } //se vier um retorno diferente do token envie para a Autenticacao public function gerenciarRetorno(event:ResultEvent):void { if(event.result.toString()!=token) { visible=false; navigateToURL(UrlAutenticador,"_top"); }else visible=true; } //Erros do sistema me retornem no Show Alert public function erroHTTP(resultado:FaultEvent):void { Alert.show(resultado.toString(), "Error"); } //ir no arquivo PHP Validar a Session public function httpRequest(auth:String):void { var service:HTTPService; service = new HTTPService(); service.url=auth; service.resultFormat="text"; service.method = "POST"; service.addEventListener("fault", erroHTTP); service.addEventListener("result", gerenciarRetorno); service.send(); } } } |
Agora, um módulo teste.
sessionteste.mxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < ?xml version="1.0" encoding="utf-8"> < | ![CDATA[ import mx.binding.utils.ChangeWatcher; import mx.binding.utils.BindingUtils; import br.com.jpa.fish.classes.*; public function testando():void { var _nameWatcher:ChangeWatcher; var validarsessao:Sessao = new Sessao(); _nameWatcher =BindingUtils.bindProperty(formulario,"visible" ,validarsessao,"visible"); } ]|> |
Para baixar os arquivos clique em: Session PHP e Flex. Espero ter ajudado.
Fernando Carvalho,
Abraços.


outubro 8th, 2008 at 3:48 pm
sim, e o validador php?
outubro 8th, 2008 at 9:49 pm
Thomas, o validador nao coloquei pq o importante seria apresentar a classe Sessao, entende? Isso pq o validador da session pode ser qualquer um que vc ja tenha.
A logica é simples(provavelmente vc ja saiba):
1- Tenho minhas estruturas e condições que vao tratar de reconhecer se a sessão é valida ou nao.
2- Caso a sessao esteja OK entao retorne um token(token:String = “UM TOKEN QUE DEVE SER O MESMO NO ARQUIVO PHP, CASO A SESSION SEJA VERDADEIRA”;)
ex:
se na classe Sessao tenho
token:String = “e0298hdf1p29fb70qrdqw39r78yhoa8374″;(Vc escolhe o valor)
a resposta no PHP seria
echo “e0298hdf1p29fb70qrdqw39r78yhoa8374″
Caso contrario, pode retornar qq coisa diferente que o sistema se encarregará de enviar o usuario para outra local.
OBS. vc não é a 1 pessoa que me pede isso. Ainda não o coloquei por esta empenhado em um projeto ate dezembro. Breve breve estarei pegando um arquivo e jogando aqui no blog.