Joomla Session-> isActive () e redirecionamento de tempo limite da sessão não estão funcionando

9

Estou tentando redirecionar meu site para a página inicial quando a sessão expira e o usuário é desconectado automaticamente (agora é redirecionado para a página de registro do joomla core, que eu não quero que o usuário veja porque criei o meu próprio site) página de registro em um componente personalizado).

No arquivo index.php do meu modelo, verifico se a sessão está ativa e redireciono se a sessão expirou:

$session = JFactory::getSession();

if (!$session->isActive()) {
   echo "session is expired";   
   header('Location: http://www.example.com/');
   exit;
 }else{
   echo "session is active";
 }

Esta solução funcionou bem até o momento em que atualizei para o Joomla 3.4.5. Após a atualização, mesmo quando o usuário é desconectado automaticamente, ele se comporta como se a sessão ainda estivesse ativa (eu verifico que através da linha de eco "sessão está ativa", como você pode ver acima).

Por que a sessão ainda está ativa, mesmo se o usuário está desconectado? Existe uma alternativa para o método $ session-> isActive ()?

user3716433
fonte

Respostas:

7

Se você olhar para o arquivo session.php, verá o seguinte:

public function isActive()
{
    return (bool) ($this->_state == 'active');
}

Qual é a função que você está chamando. Não tenho certeza se isso foi feito propositalmente ou se foi um erro, mas sempre retornará 1.

Em vez disso, você usa:

$session = JFactory::getSession();
echo $session->getState();

O qual retornará um se o seguinte:

  • inativo
  • ativo
  • expirado
  • destruído
  • erro

Você pode basear sua ifdeclaração nisso, por exemplo:

$session = JFactory::getSession();

if ($session->getState() !== 'active') 
{
    echo 'session is not active';   
    header('Location: http://www.example.com/');
    exit;
}
else
{
    echo 'session is active';
}

Em uma nota lateral, eu sugiro usar o JFactory::getApplication()->redirect()método Joomla em vez deheader()

Espero que isto ajude

Lodder
fonte
Muito obrigado !! Era exatamente isso que eu estava procurando. Funcionou perfeitamente! Obrigado novamente ! :)
user3716433
@ user3716433 - De nada. Por favor, marque a resposta como aceite, clicando no ícone "tick"
Lodder
return (bool) ($ this -> _ state == 'ativo'); nem sempre retornará 1, retornará "true" se $ this -> _ state estiver "ativo", caso contrário, retornará false. Não vejo por que seu código funciona e o código inicial não !? Apenas curioso ... $ session-> getState ()! == 'active' produz os mesmos resultados como! $ Session-> isActive ()
fruppel
@fruppel - Acabei testado esta função em um site Joomla 3.4.5 e sempre voltando 1, até pensei que deveria retornar um boolean
Lodder
Ok, vou verificar também. Talvez seja um bug
fruppel