A session php expira aleatoriamente após alguns minutos

Eu tenho uma página de login / sistema que funcionou corretamente por anos, deixando o usuário efetuou o login até que ele / ela fechasse a janela do navegador ou desconectasse manualmente. Mas ultimamente (começando ontem) depois de apenas alguns minutos de inatividade, o cookie / s da session parece expirar, fazendo com que o usuário seja desconectado automaticamente.

Isso acontece em diferentes navegadores e sistemas operacionais diferentes, a versão do PHP é 5.6.29, que foi alterada recentemente (antes de 5,5 e até 5,3).

Eu crie e atualize a session em cada página com session_start() . O script de login primeiro verifica o nome do usuário e PW e também obtém outros dados do usuário do database. Esses outros dados são salvos em variables ​​e, em seguida, escritos em variables ​​de session como

 $_SESSION['username'] = $name; $_SESSION['usertype'] = $type; 

O estado de login bem-sucedido é salvo desta forma:

 $_SESSION['login'] = "ok"; 

Nas outras páginas, verifico o estado de login como este:

 session_start(); if(($_SESSION['login'] != "ok") OR ($_SESSION['usertype'] != "xxx")) { header("Location: ../login.php"); /* redirects to login page if conditions are not true */ exit; } 

O login funciona e os usuários registrados podem prosseguir para outras páginas, desde que seja mais ou menos em constante sucessão, mas se alguém aguardar alguns minutos antes de proceder (ou seja, sem qualquer atividade), ele / ela está desconectado ( ou seja, redirecionado para a página de login ao tentar abrir outra página).

Para torná-lo extra-desagradável, metade do tempo funciona como esperado, também depois de meia hora …

qualquer ajuda seria muito bem vinda.


ATUALIZAR:

Adicionando ini_set('session.gc_maxlifetime', 3600'); e `ini_set (‘session.cookie_lifetime’, 3600); não ajudou. Eu o removi novamente.

Depois disso, verifiquei os registros de erros e descobri:

ap_pass_brigade falhou com o erro 103: o software causou a interrupção da conexão

(o problema é que eu não tenho access às configurações do servidor – isso é em um espaço compartilhado …)

   

Você pode ver a configuração php (php.ini) por phpinfo ();

 < ?php phpinfo(); 

Verifique os valores da session.gc_maxlifetime primeiro, então, se você precisar configurá-lo, veja as seguintes formas.

Você pode configurá-lo com o arquivo .htaccess se você não tiver permissão para editar o arquivo php.ini.

.htaccess

  php_value session.cookie_lifetime 3600 php_value session.gc_maxlifetime 3600  

Mesmo você pode configurá-lo por ini_set ();

 < ?php ini_set('session.gc_maxlifetime', 3600); 

Para quem está interessado: a session não expirou, mas as variables ​​da session desapareceram (e voltaram a aparecer aleatoriamente).

Isso é discutido em uma questão de acompanhamento que postei aqui:

As variables ​​php $ _SESSION desaparecem e reaparecem aleatoriamente