Joomla Session-> isActive () & не работает

Я пытаюсь перенаправить свой сайт на домашнюю страницу, когда сеанс истекает, и пользователь автоматически выйдет из системы (прямо сейчас он перенаправляется на главную страницу регистрации 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 ()?

9 голосов | спросил user3716433 7 MonEurope/Moscow2015-12-07T19:39:21+03:00Europe/Moscow12bEurope/MoscowMon, 07 Dec 2015 19:39:21 +0300 2015, 19:39:21

1 ответ


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';
}

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

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

ответил Lodder 7 MonEurope/Moscow2015-12-07T19:50:33+03:00Europe/Moscow12bEurope/MoscowMon, 07 Dec 2015 19:50:33 +0300 2015, 19:50:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132