Ticket #926 (closed melhoria: fixed)
Avisar melhor o usuário quando expirada a sessão.
Reported by: | amuller | Owned by: | niltonneto |
---|---|---|---|
Priority: | grave | Milestone: | Expresso 2.2 |
Component: | ExpressoMail | Version: | trunk |
Severity: | Keywords: | tratar erro sessão expirada | |
Cc: | WorkGroup: |
Description
Avisar melhor o usuário quando expirada a sessão no expressoMail. Muitas vezes ele consegue executar diversas operações sem estar logado, só em determinado momento é perceptível a expiração.
Change History
comment:3 Changed 14 years ago by niltonneto
- Keywords tratar erro sessão expirada added
- Status changed from new to assigned
- Version changed from trunk to branch 2.0
- Milestone changed from Expresso 2.2 to Expresso 2.0.4
Muitos erros acontecem quando a sessão expira e o usuário não percebe que expirou. Alguns exemplos:
- The server denied your request to send a mail, you cannot use this mail address.
- Can't open mailbox {:/notls/novalidate-cert}INBOX/Lixeira: invalid remote specification
- undefined
- Muitas vezes não faz nada (erro javascript).
Isso tem ocasionado muito transtorno entre os usuários e administradores, que não sabem detectar o que e quando acontece algum tipo de problema de fato.
comment:4 follow-up: ↓ 7 Changed 14 years ago by niltonneto
A solução consiste em centralizar a validação de sessão em um único ponto do Expresso, mesmo sendo via AJAX. Irá tratar problemas de sessão inválida (#559) ou expirada.
comment:5 Changed 14 years ago by niltonneto
- Milestone changed from Expresso 2.0.4 to Expresso 2.0.5
comment:6 Changed 14 years ago by niltonneto
As requisições AJAX, para que tenham um tempo de resposta rápido, não fazem o uso do "header.inc.php" e sim apenas o "header.session.inc.php". Por essa razão, se o usuário deixa o Expresso Mail aberto, seu refresh() automático feito pelo AJAX não mantém viva a sessão como deveria, quer dizer, não atualiza o valor de $_SESSION[phpgw_session][session_dla] com a função time(). O "header.inc.php", quando carregado, faz isso.
Se um usuário permanece mais do que 4 horas* somente no Expresso Mail, ele vai conseguir usá-lo normalmente. Porém ao trocar de módulo, a validação será feita pela API e sua sessão será encerrada.
O funcionamento correto é atualizar esse valor em cada requisição AJAX feita, para manter a sessão viva, conforme a API do Expresso faz.
(*) Tempo para expiração da sessões configurado em "Administrador-> Configurações do Servidor".
comment:7 in reply to: ↑ 4 Changed 14 years ago by niltonneto
- Version changed from branch 2.0 to trunk
- Type changed from defeito to melhoria
- Milestone changed from Expresso 2.0.5 to Expresso 2.2
Replying to niltonneto:
A solução consiste em centralizar a validação de sessão em um único ponto do Expresso, mesmo sendo via AJAX. Irá tratar problemas de sessão inválida (#559) ou expirada.
A função verify_session() foi retirada da "main.js" e implementada dentro do "ExpressoAjax?.js", para que seja usada por qualquer módulo. Todas as suas chamadas dentro do ExpressoMail? foram removidas e centralizadas no retorno do handler do Connector, dentro do "ExpressoAjax?.js". Idem para variável "hold_session" declarada em "globals.js". Revisão [2328].
comment:8 follow-up: ↓ 10 Changed 14 years ago by niltonneto
Corrigido em [2329], referente ao "keep alive" da sessão e validação das requisições AJAX.
Se houver algum problema, por favor me avisem.
comment:9 Changed 14 years ago by niltonneto
$_SESSION[phpgw_session][session_dla] deve ser atualizado somente quando "header.session.inc.php" for carregado a partir do "controller.php" (ExpressoAjax?). Corrigido em [2332].
comment:10 in reply to: ↑ 8 ; follow-ups: ↓ 11 ↓ 12 Changed 14 years ago by rafaelraymundo
Replying to niltonneto:
Corrigido em [2329], referente ao "keep alive" da sessão e validação das requisições AJAX.
Se houver algum problema, por favor me avisem.
Aparentemente o commit [2329] está causando sessão expirada ao entrar no módulo de email, como expresso-admin
comment:11 in reply to: ↑ 10 Changed 14 years ago by niltonneto
Replying to rafaelraymundo:
Replying to niltonneto:
Corrigido em [2329], referente ao "keep alive" da sessão e validação das requisições AJAX.
Se houver algum problema, por favor me avisem.Aparentemente o commit [2329] está causando sessão expirada ao entrar no módulo de email, como expresso-admin
Vou verificar. Meu php.ini estava auto_start 1 e use_cookies 1... :S
comment:12 in reply to: ↑ 10 ; follow-up: ↓ 13 Changed 14 years ago by niltonneto
Replying to rafaelraymundo:
Replying to niltonneto:
Corrigido em [2329], referente ao "keep alive" da sessão e validação das requisições AJAX.
Se houver algum problema, por favor me avisem.Aparentemente o commit [2329] está causando sessão expirada ao entrar no módulo de email, como expresso-admin
Corrigido em [2335]. Por favor, teste aí.
comment:13 in reply to: ↑ 12 ; follow-up: ↓ 14 Changed 14 years ago by rafaelraymundo
Replying to niltonneto:
Replying to rafaelraymundo:
Replying to niltonneto:
Corrigido em [2329], referente ao "keep alive" da sessão e validação das requisições AJAX.
Se houver algum problema, por favor me avisem.Aparentemente o commit [2329] está causando sessão expirada ao entrar no módulo de email, como expresso-admin
Corrigido em [2335]. Por favor, teste aí.
O firebug apresentou um erro ao acessar o módulo de email em: tree_folders.getNodeById(folder_select) is undefined http://10.200.113.xxx/expressoMail1_2/js/draw_api.js?1.235 Line 227
comment:14 in reply to: ↑ 13 ; follow-ups: ↓ 15 ↓ 17 Changed 14 years ago by niltonneto
Replying to rafaelraymundo:
O firebug apresentou um erro ao acessar o módulo de email em: tree_folders.getNodeById(folder_select) is undefined http://10.200.113.xxx/expressoMail1_2/js/draw_api.js?1.235 Line 227
Acho que esse problema não tem a ver este ticket. Verifique o ticket #991 ou a revisão [2317].
comment:15 in reply to: ↑ 14 ; follow-up: ↓ 16 Changed 14 years ago by rafaelraymundo
Replying to niltonneto:
Replying to rafaelraymundo:
O firebug apresentou um erro ao acessar o módulo de email em: tree_folders.getNodeById(folder_select) is undefined http://10.200.113.xxx/expressoMail1_2/js/draw_api.js?1.235 Line 227
Acho que esse problema não tem a ver este ticket. Verifique o ticket #991 ou a revisão [2317].
Nos testes aqui aconteceu o seguinte:
Revisão [2329] - Ao acessar o módulo de email o usuário é remetido para a tela de login com a mensagem de sessão expirada
Revisão [2335] - Ocorre erro ao acessar o módulo de email, ficando a tela do módulo em branco.
Revisão [2328] - O problema não ocorre, o módulo de email carrega normalmente
comment:16 in reply to: ↑ 15 Changed 14 years ago by niltonneto
Replying to rafaelraymundo:
Nos testes aqui aconteceu o seguinte:
Revisão [2329] - Ao acessar o módulo de email o usuário é remetido para a tela de login com a mensagem de sessão expirada
Revisão [2335] - Ocorre erro ao acessar o módulo de email, ficando a tela do módulo em branco.
Revisão [2328] - O problema não ocorre, o módulo de email carrega normalmente
Rafael, a última revisão [2335] deve estar retornando algum erro (tela branca). Por favor, verifique para mim no arquivo de log de error do Apache se aparece o porquê. Ou então ligue o display_errors no php.ini
comment:17 in reply to: ↑ 14 Changed 14 years ago by niltonneto
Replying to niltonneto:
Replying to rafaelraymundo:
O firebug apresentou um erro ao acessar o módulo de email em: tree_folders.getNodeById(folder_select) is undefined http://10.200.113.xxx/expressoMail1_2/js/draw_api.js?1.235 Line 227
Acho que esse problema não tem a ver este ticket. Verifique o ticket #991 ou a revisão [2317].
Rafael, o problema reportado acima tem a ver com a revisão [2331], do ticket #911.
comment:18 follow-up: ↓ 19 Changed 14 years ago by rafaelraymundo
Ok, testando a revisão [2335] verifiquei o arquivo de log e retornou alguns warnnings e o seguinte fatal error:
Fatal error: Class 'imap_functions' not found in /var/www/expresso/controller.php on line 57
comment:19 in reply to: ↑ 18 Changed 14 years ago by niltonneto
Replying to rafaelraymundo:
Ok, testando a revisão [2335] verifiquei o arquivo de log e retornou alguns warnnings e o seguinte fatal error:
Fatal error: Class 'imap_functions' not found in /var/www/expresso/controller.php on line 57
Ok, baixe então o controller.php da revisão 2330 e teste pra ver se funciona essa parte da sessão aí...
comment:20 follow-up: ↓ 21 Changed 14 years ago by rafaelraymundo
comment:21 in reply to: ↑ 20 Changed 14 years ago by niltonneto
Replying to rafaelraymundo:
Voltando para a revisão [2330] funciona. O problema é a remoção da seguinte linha 35 no commit [2331]:
$app = $_SESSION['phpgw_info']['expresso']['currentapp'];Indo para a revisão [2335] e adicionando essa linha funciona normalmente.
OK, este assunto não pertence a esse ticket. O que importa é que os testes aí com a revisão [2335] funcionaram.
comment:22 Changed 14 years ago by niltonneto
A revisão [2382] substitui nome hardcoded de sessão por session_name(). Força também o "logout" quando não passar pelo controller AJAX, em uma possível tentativa de captura de sessão.
comment:23 Changed 14 years ago by niltonneto
As correções deste ticket serão adaptadas e aplicadas nos Branches 2.0 e 2.1, conforme ticket #1018.
comment:24 follow-up: ↓ 25 Changed 14 years ago by amuller
Se foi aplicada no 2.0 foi re-aplicada no 2.2. Pode ser fechado este ticket?
comment:25 in reply to: ↑ 24 Changed 14 years ago by niltonneto
comment:26 Changed 14 years ago by amuller
- Status changed from assigned to closed
- Resolution set to fixed
Eu verifiquei e foi aplicado no branches 2.2
[2084] aplica a melhoria no brances 2.1