Joomla Session-> isActive () и перенаправление сеанса не работает

9

Я пытаюсь перенаправить свой веб-сайт на домашнюю страницу, когда сеанс истекает, и пользователь автоматически выходит из системы (сейчас он перенаправляется на страницу регистрации ядра Joomla, которую я не хочу, чтобы пользователь видел, потому что я создал свой собственный страница регистрации в пользовательском компоненте).

В файле index.php моего шаблона я проверяю, активен ли сеанс, и выполняю перенаправление, если сеанс истек:

$session = JFactory::getSession();

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

Это решение работало до тех пор, пока я не обновился до Joomla 3.4.5. После обновления, даже когда пользователь вышел из системы автоматически, он ведет себя так, как будто сеанс все еще активен (я проверяю, что через строку «сеанс активна» эха, как вы можете видеть выше).

Почему сеанс все еще активен, даже если пользователь вышел из системы? Есть ли альтернатива методу $ session-> isActive ()?

user3716433
источник

Ответы:

7

Если вы посмотрите на файл session.php, вы увидите следующее:

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

Какую функцию вы вызываете. Я не уверен, было ли это сделано преднамеренно или это было ошибкой, но это всегда вернется 1.

Вместо этого вы используете:

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

Который вернет один, если следующее:

  • неактивный
  • активный
  • истекший
  • разрушенный
  • ошибка

Затем вы можете основывать свое ifутверждение на этом, например:

$session = JFactory::getSession();

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

Кстати, я бы предложил использовать JFactory::getApplication()->redirect()метод Joomla вместоheader()

Надеюсь это поможет

Лоддер
источник
Спасибо !! Это именно то, что я искал. Работало отлично! Еще раз спасибо ! :)
user3716433
@ user3716433 - Пожалуйста. Пожалуйста, отметьте ответ как принятый, нажав значок «галочка»
Lodder
return (bool) ($ this -> _ state == 'active'); не всегда возвращает 1, возвращает «true», если $ this -> _ состояние «активно», в противном случае возвращает false. Я не понимаю, почему ваш код работает, а исходный код нет !? Просто любопытно ... $ session-> getState ()! == 'active' дает те же результаты, что и! $ Session-> isActive ()
fruppel
@fruppel - Я только что проверил эту функцию на сайте Joomla 3.4.5, и он всегда возвращается 1, хотя думал, что он должен возвращать логическое значение
Lodder
Хорошо, я тоже это проверю. Может быть, это ошибка
Fruppel