Sessões em Aplicações WEB

As aplicações Web MERGE Magic, eDeveloper ou Magic xpa (UniPaaS), caracterizam-se por serem aplicações web context less.

Isso significa que a cada requisição externa (HTTP request) um contexto para a chamada é criado, e no final, quando a página de resposta está retornando ao programa requisitante (ex: browser), este contexto é destruído.

Em um contexto criado, estão cópias das variáveis do Main Program, variáveis de ambiente (GetParam/SetParam), configurações de ambiente (MAGIC.INI) e tabelas de memória. Tudo isso é eliminado quando o contexto é destruído (quando a requisição termina).

No Magic xpa, é possível mudar este cenário para context full. Neste modelo, significa que uma nova requisição web vai encontrar no servidor (neste caso, a runTime Magic xpa) os mesmos dados que lá estavam quando a requisição anterior foi finalizada.

Isto é feito definindo-se a propriedade Keep Created Context como YES, no programa batch que foi invocado pela requisição externa (http://MyServer/UniScripts/Mgrqisipi.dll? APPNAME=MyApp&PRGNAME=MyProg). Neste caso, o contexto da requisição não será destruído ao término da mesma (nota: ele ainda será destruído automaticamente se ficar muito tempo inativo, cfe. as configurações do AppServer).

 

Como recuperar os dados (contexto/sessão) da requisição anterior?

Para isto, basta informar o ID exclusivo do contexto que está criado no AppServer (runTime Magic xpa), passando na requisição o argumento CTX=???:

(http://MyServer/UniScripts/Mgrqisipi.dll?APPNAME=MyApp&PRGNAME=MyProg&CTX=??????)

 

Como saber o ID do contexto/sessão da requisição anterior?

Esta informação está disponível através da função CtxGetId(). Normalmente usa-se ela em conjunto com uma tag MERGE para preencher um cookie, ou variável javaScript, ou campo de formulário do conteúdo que está sendo retornado. Assim, pode-se recuperar este dado posteriormente para usá-lo na próxima requisição.

O contexto mantido na runTime Magic xpa (AppServer) pode ainda ser destruído manualmente (ex: requisição final, de LogOut). Para isto, basta acrescentar o argumento TRMCTX=Y na requisição:

(http://MyServer/UniScripts/Mgrqisipi.dll?APPNAME=MyApp&PRGNAME=MyProg&CTX=??????&TRMCTX=Y)

Mais detalhes sobre este recurso estão disponíveis no help do Magic xpa, em: Home > Reference Guide > Programs > Task Properties > Advanced > Keep Created Context

 

OBS: Assim como APPNAME, PRGNAME, ARGUMENTS, USERNAME, PASSWORD, PRIORITY, HOST, PORT, NOWAIT, VARIABLES, QUERY, FILENAME, REQID, CLEAR, EXE e TERMINATE, CTX e TRMCTX também são palavras reservadas e não devem ser usadas como variáveis ou campos das páginas Web, a fim de evitar possíveis problemas de lógica dos programas executados. O projeto exemplo MobileWeb mostra o conceito state full do Magic xpa na prática.

Manoel Frederico - Gerente de Produto e Magic Evangelista
Manoel Frederico – Gerente de Produto e Magic Evangelista

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *