web-dev-qa-db-fra.com

Joomla Session-> isActive () et la redirection du délai d'expiration de la session ne fonctionnent pas

J'essaie de rediriger mon site Web vers la page d'accueil lorsque la session arrive à expiration et que l'utilisateur est automatiquement déconnecté (pour le moment, il est redirigé vers la page d'enregistrement de joomla core, que je ne souhaite pas que l'utilisateur voie car j'ai créé le mien. page d'enregistrement dans un composant personnalisé).

Dans le fichier index.php de mon modèle, je vérifie si la session est active et effectue une redirection si la session a expiré:

$session = JFactory::getSession();

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

Cette solution a bien fonctionné jusqu'au moment où j'ai mis à jour Joomla 3.4.5. Après la mise à jour, même lorsque l'utilisateur est déconnecté automatiquement, il se comporte comme si la session était toujours active (je vérifie que la ligne "session est active" est la ligne d'écho, comme vous pouvez le voir ci-dessus).

Pourquoi la session est-elle toujours active même si l'utilisateur est déconnecté? Existe-t-il une alternative à la méthode $ session-> isActive ()?

9
user3716433

Si vous regardez le fichier session.php, vous voyez ce qui suit:

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

Quelle est la fonction que vous appelez. Je ne suis pas sûr si cela a été fait à dessein ou s'il s'agissait d'une erreur, mais il retournera toujours 1.

Au lieu de cela, vous utilisez:

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

Ce qui retournera un si le suivant:

  • inactif
  • actif
  • expiré
  • détruit
  • erreur

Vous pouvez ensuite baser votre déclaration if sur celle-ci, par exemple:

$session = JFactory::getSession();

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

Sur une note de côté, je suggère d'utiliser la méthode JFactory::getApplication()->redirect() de Joomla au lieu de header()

J'espère que cela t'aides

7
Lodder