Joomla Session-> isActive () y la redirección de tiempo de espera de sesión no funciona


9

Estoy tratando de redirigir mi sitio web a la página de inicio cuando caduca la sesión y el usuario se desconecta automáticamente (en este momento se redirige a la página de registro de Joomla Core, que no quiero que el usuario vea porque he creado el mío página de registro en un componente personalizado).

En el archivo index.php de mi plantilla, verifico si la sesión está activa y realizo una redirección si la sesión expiró:

$session = JFactory::getSession();

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

Esta solución funcionó bien hasta el momento en que actualicé a Joomla 3.4.5. Después de la actualización, incluso cuando el usuario cierra la sesión automáticamente, se comporta como si la sesión aún estuviera activa (verifico a través de la línea de eco "la sesión está activa", como puede ver arriba).

¿Por qué la sesión sigue activa incluso si el usuario está desconectado? ¿Hay alguna alternativa al método $ session-> isActive ()?

Respuestas:


7

Si observa el archivo session.php, verá lo siguiente:

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

¿Cuál es la función que estás llamando? No estoy seguro de si esto se hizo a propósito o si fue un error, pero siempre volverá 1.

En cambio, usas:

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

Que devolverá uno si lo siguiente:

  • inactivo
  • activo
  • Caducado
  • destruido
  • error

Luego puede basar su ifdeclaración en esto, por ejemplo:

$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 una nota al margen, sugeriría usar el JFactory::getApplication()->redirect()método de Joomla en lugar deheader()

Espero que esto ayude


Muchas gracias !! Esto es exactamente lo que estaba buscando. ¡Funcionó perfectamente! Gracias de nuevo ! :)
user3716433

@ user3716433 - De nada. Marque la respuesta como aceptada haciendo clic en el icono "tick"
Lodder

return (bool) ($ this -> _ state == 'active'); no siempre devolverá 1, devuelve "verdadero" si $ this -> _ state está "activo", de lo contrario, devuelve falso. ¡¿No veo por qué su código funciona y el código inicial no ?! Simplemente curioso ... $ session-> getState ()! == 'active' produce los mismos resultados como! $ Session-> isActive ()
fruppel

@fruppel - Acabo de probar esta función en un sitio de Joomla 3.4.5 y siempre regresa 1, incluso si se supone que debe devolver un valor booleano
Lodder

Ok, también lo comprobaré. Tal vez sea un error
fruppel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.