Login e Session Timeout
16/12/2009 00:00
0
Olá!

Estou com uma dúvida e não sei como pesquisar sobre,
é o seguinte:

O timeout da session do servidor Tomcat está configurado para 10 minutos...

Tenho uma tela de lançamento de notas que carrega todos os alunos de uma determinada disciplina em forma de list, porém com os campos nota 1, nota 2 e faltas editáveis...
Quando clico no botão salvar, no controller é feito um each e acontece N updates...

O problema ocorre quando uma disciplina tem muitos alunos, no exemplo que esta dando problema são 65 alunos para serem digitadas as notas e faltas, aí depois de inserir em todos os campos as notas e as faltas o tempo gasto foi tanto que ao clicar em salvar a session com o Tomcat já expirou por inatividade, e a app redireciona para a tela de login...

O que complica é que ao efetuar o login novamente, minha app redireciona para o index, perdendo assim todos os dados que foram digitados nos campos. Teria que retornar para a página que estava antes, ou seja, para a página de lançamento de notas com os dados recuperados para continuar e salvar.

E eu não tenho ideia de como fazer isso <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
não sei qual seria o termo correto para pesquisar sobre...

Alguem sabe se tem alguma forma de resolver isso? plugin, seja o que for..

O que a gente aconselhou aos usuários é que salvassem a cada 10 notas alteradas, simples...
mas com usuário não é bem assim hehe, o jeito é concertar esse login...

obs: por segurança, o timeout do Tomcat não deve ser aumentado, na verdade era até melhor que ficasse em 5min ao inves de 10min...
Tags: Grails


0
Sugestão tosca?
Ai segue uma: <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

Faça o seguinte: implemente um timer em Javascript mesmo que de tempos em tempos faça uma chamada no servidor (pode ser para uma action vazia mesmo). Assim o timeout não irá executar.

(eu avisei que era uma solução tosca <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) --> )


0
haha é uma ideia mas aí acaba com a &quot;segurança&quot; que o timeout provê!

por exemplo, um professor vai lançar notas, ele faz login no sistema, começa a lançar as notas, alguém chama ele e ele deixa o pc ligado com a página de lançamento de notas aberta, complicado.

O timeout é bom nesses casos, a gente tinha configurado para 5 minutos, pois aí se ele deixa lá parado por esse tempo e vai alguém querer &quot;sacanear&quot;, o login já era, ele não vai conseguir..

São informações bem importantes que estão em questão, por isso o timeout é necessário.

O que seria legal é um javascript no &quot;onFocus&quot; (não sei se é essa a função) dos campos que fizesse essa chamada ao servidor, aí se ele ficasse parado aí sim estaria realmente inativo e a session terminaria. Será que tem como fazer isso?
16/12/2009 00:00


0
[quote=&quot;erhorn&quot;]haha é uma ideia mas aí acaba com a &quot;segurança&quot; que o timeout provê!

por exemplo, um professor vai lançar notas, ele faz login no sistema, começa a lançar as notas, alguém chama ele e ele deixa o pc ligado com a página de lançamento de notas aberta, complicado.

O timeout é bom nesses casos, a gente tinha configurado para 5 minutos, pois aí se ele deixa lá parado por esse tempo e vai alguém querer &quot;sacanear&quot;, o login já era, ele não vai conseguir..

São informações bem importantes que estão em questão, por isso o timeout é necessário.

O que seria legal é um javascript no &quot;onFocus&quot; (não sei se é essa a função) dos campos que fizesse essa chamada ao servidor, aí se ele ficasse parado aí sim estaria realmente inativo e a session terminaria. Será que tem como fazer isso?[/quote]

ha h aha! Eu avisei que era tosca!

Bom, mas ai você continua com o mesmíssimo problema, porque assim como o professor está fora, o mesmo problema ocorreria.

Eu também já pensei bastante neste problema e até agora a única solução que encontrei foi a tosqueira que citei acima.
Se bem que nem é tããão tosca assim, pois se não me engano, o Google adota uma política bem semelhante (vide GMail)


0
Uma solução seria salvar campo a campo por ajax usando o onchange do campo. Dessa maneira evita o timeout e garante que o que o usuário já editou já está salvo.

[]'s

Rodrigo C. A.
16/12/2009 00:00


0
[quote=&quot;rcauler&quot;]Uma solução seria salvar campo a campo por ajax usando o onchange do campo. Dessa maneira evita o timeout e garante que o que o usuário já editou já está salvo.

[]'s

Rodrigo C. A.[/quote]

É uma solução interessante: porém lembre-se de avisar seu usuário deste comportamento (ou torná-lo opcional) para evitar &quot;acidentes&quot; do tipo

&quot;Pera ai! Mas eu não queria ter cadadastrado isto!&quot; <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->


0
Valeu kikolobo e rcauler mas esse esquema do javascript ficar fazendo requisições ao servidor vou descartar..
É melhor que continue &quot;kicando&quot; o usuário se ele ficar muito tempo inativo.

O que eu preciso mesmo é arrumar o login, aquilo que eu falei no inicio.
Igual acontece em muitos sites que precisam de login para acessar, foruns e tal
se você clica em um link de um determinado post sem estar logado, o site te redireciona para a pagina de login, após você efetuar o login você é redirecionado para o tal post que você tentou acessar inicialmente.
É mais ou menos por ae.

Acredito que deve ter uma solução não muito complicada pois isso não é algo incomum.

Valeu.
17/12/2009 00:00


0
Isso que vc quer o Spring Security faz automaticamente. Inclusive ele persiste os campos do formulário. Se você puder usar o Spring Security Plugin pra cuidar de autenticação e autorização do sistema provavelmente vai resolver seu problema.

[]'s

Rodrigo C. A.
17/12/2009 00:00


0
hmm valeu pela dica, vou dar uma estudada nesse plugin.

mas se precisar criar tabelas de usuários, de roles e tudo mais já não vai servir.
A autenticação e gerenciamento aqui é todo feito no banco de dados e não há possibilidade de mudar.

A autenticação é dessa forma:
try{
DriverManager.getConnection(url,usuario,senha)
conectado = true

}catch(Exception e){
conectado = false
}

baseado nos logins que tem no banco de dados.
17/12/2009 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto