Ticket #926 (closed melhoria: fixed)

Opened 10 years ago

Last modified 10 years ago

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:1 Changed 10 years ago by amuller

[2084] aplica a melhoria no brances 2.1

comment:2 Changed 10 years ago by amuller

  • Owner changed from amuller to niltonneto

comment:3 Changed 10 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 10 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 10 years ago by niltonneto

  • Milestone changed from Expresso 2.0.4 to Expresso 2.0.5

comment:6 Changed 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 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 10 years ago by 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.

comment:21 in reply to: ↑ 20 Changed 10 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 10 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 10 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 10 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 10 years ago by niltonneto

Replying to amuller:

Se foi aplicada no 2.0 foi re-aplicada no 2.2. Pode ser fechado este ticket?

Se a revisão [2391] foi re-aplicada no branch 2.2 sim, pode fechar.

comment:26 Changed 10 years ago by amuller

  • Status changed from assigned to closed
  • Resolution set to fixed

Eu verifiquei e foi aplicado no branches 2.2

Note: See TracTickets for help on using tickets.