Переадресація 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 ()?

Відповіді:


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

Сподіваюсь, це допомагає


Дуже дякую !! Це саме те, що я шукав. Це спрацювало чудово! Знову дякую ! :)
користувач3716433

@ user3716433 - Ласкаво просимо. Будь ласка, позначте відповідь прийнятою, натиснувши на іконку «галочка»
Лодер

return (bool) ($ this -> _ state == 'active'); не завжди повертає 1, він повертає "true", якщо $ this -> _ state "активний", інакше він повертає false. Я не бачу, чому ваш код працює, а початковий код - ні! Просто цікаво ... $ session-> getState ()! == 'active' дає такі самі результати, як! $ Session-> isActive ()
fruppel

@fruppel - Я щойно перевіряв цю функцію на сайті Joomla 3.4.5, і вона завжди повертається 1, навіть думала, що вона повинна повернути булевий стан
Лоддер

Добре, я теж перевірю. Можливо, це помилка
fruppel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.