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 ()?

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.