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

도움이 되었기를 바랍니다


정말 고마워 !! 이것이 바로 내가 찾던 것입니다. 완벽하게 작동했습니다! 다시 감사합니다! :)
user3716433

@ user3716433-천만에요. "틱"아이콘
Lodder

리턴 (bool) ($ this-> _ state == 'active'); 항상 1을 반환하지는 않으며 $ this-> _ state가 "active"이면 "true"를 반환하고, 그렇지 않으면 false를 반환합니다. 코드가 작동하는 이유와 초기 코드가 아닌 이유를 모르겠습니다!? 그냥 궁금해서 ... $ session-> getState ()! == 'active'는! $ session-> isActive ()와 같은 결과를 생성합니다
fruppel

@fruppel-방금 Joomla 3.4.5 사이트에서이 기능을 테스트했으며 항상 반환됩니다 1. 심지어 부울을 반환해야한다고 생각했습니다.
Lodder

좋아, 나는 그것을 확인할 것이다. 아마도 버그 일 것입니다.
fruppel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.