Session Joomla-> La redirection isActive () & timeout de session ne fonctionne pas

9

J'essaie de rediriger mon site Web vers la page d'accueil lorsque la session expire et que l'utilisateur est automatiquement déconnecté (en ce moment, il est redirigé vers la page d'inscription de joomla core, que je ne veux pas que l'utilisateur voit car j'ai créé le mien page d'inscription 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 vers 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 via la ligne d'écho "la session est active", 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 ()?

user3716433
la source

Réponses:

7

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 sais pas si cela a été fait exprès ou si c'était une erreur, mais cela reviendra toujours 1.

Au lieu de cela, vous utilisez:

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

Qui en renverra un si:

  • inactif
  • actif
  • expiré
  • détruit
  • Erreur

Vous pouvez ensuite baser votre ifdéclaration sur cela, 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';
}

En passant, je suggère d'utiliser la JFactory::getApplication()->redirect()méthode Joomla au lieu deheader()

J'espère que cela t'aides

Lodder
la source
Merci beaucoup !! Ceci est exactement ce que je cherchais. Cela a parfaitement fonctionné! Merci encore ! :)
user3716433
@ user3716433 - Vous êtes les bienvenus. Veuillez marquer la réponse comme acceptée en cliquant sur l'icône "cocher"
Lodder
return (bool) ($ this -> _ state == 'active'); ne retournera pas toujours 1, il retourne "true" si $ this -> _ state est "active", sinon il retourne false. Je ne vois pas pourquoi votre code fonctionne et pas le code initial!? Juste curieux ... $ session-> getState ()! == 'active' produit les mêmes résultats que! $ Session-> isActive ()
fruppel
@fruppel - Je viens de tester cette fonction sur un site Joomla 3.4.5 et elle revient toujours 1, même si elle est censée renvoyer un booléen
Lodder
Ok, je vais le vérifier aussi. C'est peut-être un bug
fruppel