[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
ajax +logout  XML
Forum Index -> Comentários Gerais Go to Page: 1, 2, 3 Next 
Author Message
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

Pessoal alguem tem alguma luz para solucionar o problema de maneira elegante e simples a respeito da invalidação da sessão e logout com ajax ?

O Eliezer está usando uma solução (provisória) , estou passando pelo mesmo problema minha app está lotada de ajax em todo lugar estou usando layout box based tableless, ou seja, a diagramação da tela é toda feita em "quadrados e retangulos" e quando uma chamada ajax é efetuada e a sessão não é valida a tela de login aparece no "quadrado" (div) que seria manipulado pelo Ajax.

Esse post mostra uma solução provisória de um usuário do fórum
http://forum.mentaframework.org/posts/list/874.page

Alguém tem alguma idéia mais simples e genérica ?

Valeu

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

Toda a parte de filtros do Mentawai está funcionando corretamente.

Temos 1 tela com N elementos HTML que poderão ser manipulados por ajax, o problema é que quando a sessão é invalidada e o usuário tenta manipular 1 determinado elemento, esse elemento se transforma na tela de login ao invés da página toda ser direcionada para a tela de login normalmente.

O meu questionamento é :

Para trabalhar com esse tipo de situação temos que usar contadores em JS e redirecionar via JS ? Ou o tem como o framework vai pegar essa responsabilidade para si ?

Tendo em vista que adicionar 1 if em cada função ajax é meio tosco tipo:

Code:
 if (XMLHttpRequest.status == 401) {
      redirectToLogin();
 }
 


Como podemos fazer esse teste usando MentaAjax ?

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Voce esta usando MentaAjax para fazer os requests?

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

Sim em algumas operações.

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Já testou com o onError do MentaAjax?

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

Em parte, vi que o onERROR não saiu na 1.11 então dei uma olhada no JS
e usei o código options.onFailure que o onERROR encapsula continua do mesmo jeito.

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

voce pode colocar isso na pagina de login;
Code:
 <% response.setHeader("TYPE", "LOGIN"); %>
 


e no MentaAjax:
Code:
 			r.onSuccess(
 				function(data){
 					alert(data.getResponseHeader("TYPE"));				
 					new mtw.response(data).innerHTML("htmlHere");
 				}
 			);
 

Ali ele vai dar um alert "LOGIN"

Veja ai se der certo pode-se até criar um metodo ali no mtw.response.

T+ Vou ranga agora... rsrsr

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

Não entendi o_0

Ou viajei ou expliquei errado, a imagem abaixo reflete bem a situação.
[Thumb - tela.jpeg]
 Filename tela.jpeg [Disk] Download
 Description
 Filesize 24 Kbytes
 Downloaded:  67 time(s)


Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

Lobo wrote:
Não entendi o_0

Ou viajei ou expliquei errado, a imagem abaixo reflete bem a situação. 


Então, cara, é como o robert disse... você vai setar a propriedade "type" no header da sua página de login para que, em meio às páginas que você requisitar via Ajax, possa diferenciar bem entre: páginas diversas e "a página de login. Uma vez podendo diferenciar qual é a página de login, você pode usar um pequeno código para, em todos os retornos do mtw.request, verificar se a página retornada é a de login (ou seja, tem o header TYPE com o valor LOGIN) e então fazer o devido redirecionamento.

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

YkyMatt boa explicação, entendi.

Parece mais um workaround do que uma solução tipo pattern, mas na minha opinião é melhor do que if (status == 401) , tipo, se tem que ficar a cargo do aplicativo cliente de saber se deverá ser direcionado pro login ou não, que seja de forma "burra" e não tentando acessar um status de erro a partir do servidor.

Minha opinião.

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Olá, voltei do almoço .

É exatamente como o YkyMatt disse, porque não tem como via JS saber para
onde voce quer ir depois de um request, porque o padrao e fazer oque voce
programou. a pagina que aparecer ele joga no div, não tem como sabermos
que pagina é essa sem ser pelo Header/ ou deve ter outras formas.

com header pode-se até implementar um ApplicationManager pro Ajax.. rsrs

tipo.

mtw.on("TYPE", "LOGIN", callSomeFunction);

ai internamente no MentaAjax, posso fazer o if, caso seja true eu executo
a função expecificada... com isso qualquer pagina com um Header
TYPE = "LOGIN", será chamada a função expecificada...

É uma ideia... oque acha?

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

Lobo wrote:
YkyMatt boa explicação, entendi.

Parece mais um workaround do que uma solução tipo pattern, mas na minha opinião é melhor do que if (status == 401) , tipo, se tem que ficar a cargo do aplicativo cliente de saber se deverá ser direcionado pro login ou não, que seja de forma "burra" e não tentando acessar um status de erro a partir do servidor.

Minha opinião. 


Partilho de sua opinião.

A minha idéia para o Ajax seria basicamente o seguinte: uma vez que o Ajax tem por base requisitar e manipular as informações no cliente, seria interessante que no MentaAjax fosse implementado um esquema de listener's. Seriam mais ou menos como filtros, só que rodariam no cliente. Algo bem simples, do tipo: suponha (como no seu caso) que o usuário queira que a página seja redirecionada quando houver uma falha de autenticação.

O próprio MentaAjax teria disponível o seguinte código:

Code:
 function LoginChecker(response)
   {
    // não sei como é o tratamento das coisas no MentaAjax, mas seria tipo:
    if (objHTTP.status == 401)
      { parent.window.location.href = getUrl(); } // onde getUrL() recupera um atributo
   }
 


Para utulizar, bastaria algo como:

Code:
 var req = new mtw.request();
 // outros comandos da requisição
 req.addListener(new LoginChecker("login.jsp")); // lembra do getUrl() ?
 


Como eu disse, a função (ou melhor, a "classe") LoginChecker estaria disponível junto ao MentaAjax. Dessa forma, qualquer um que quisesse utilizar, o faria como exemplifiquei acima. Além do caso do LoginChecker, poderíamos criar e disponibilizar diversos Listener's, como: ShowDataListener(divId) (que mostraria o conteúdo do request numa div), um ComboboxValueListener(combo) (que pegaria os valores do request e, usando o mtw.response, preencheria o combobox), tirando um pouco do trabalho repetitivo que temos quando utilizamos Ajax, mesmo com o MentaAjax. Ocorre que, uma vez que o MentaAjax já nos facilita tanto, podemos tornar as coisas ainda mais simples de se utilizar.

Bom... é só uma idéia

OBS.: talvez pudéssemos substituir a palavra Listener por Handler.

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

Eu acho uma boa Robert.

Tem 1 coisa de arquitetura que é meio chata acho até que podemos falar sobre isso na lista ou por gtalk.

Pra adiantar a questão é a seguinte:

-Os clientes de apps sem ajax são clientes burros, apesar do javaScript manipular apresentação e conteúdo com DOM e CSS;
-Os clientes de apps com ajax tem uns 2 neurônios e é ai que está a questão, até onde o ajax deverá ser inteligente a ponto de tomar decisões relacionadas com a sessão do usuário no servidor ?

Resumindo, se jogarmos a responsabilidade pro ajax o framework está livre dessa tarefa, ele faz o tabalho dele (como está fazendo normalmente) e o ajax toma conta de jogar o cara pra tela de login ou seja la o que for.

Dentro desse parágrafo acima, temos 2 situações que eu não encontrei como padrão em lugar nenhum: Qual a maneira correta e livre de gambiarras para solucionar esse problema o_0 , ajax verificar códigos ou usar um workaround dessa forma....?

Entende ?

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Sim, da para fazer no js sim, mas o js precisa de basear-se em algo concorda?

Em que? eis a questão....
- No header?
- No codigo retornado do Server?
- Etc e tal..
....

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

A propósito o código funcionou corretamente.

Code:
 if(data.getResponseHeader("TYPE") != null) {
     window.location = "LogoutAction.mtw";
 } 
 


Esse foi baseado no header, tipo ajax "burro".




Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
 
Forum Index -> Comentários Gerais Go to Page: 1, 2, 3 Next 
Go to:   
Powered by JForum 2.1.6 © JForum Team