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()方法有替代方法吗?

Answers:


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

希望这可以帮助


非常感谢 !!这正是我想要的。它工作得很好!再次感谢 !:)
user3716433

@ user3716433-不用客气。请点击“对勾”图标,将答案标记为已接受
-Lodder

return(布尔)($ this-> _ state =='active'); 不会总是返回1,如果$ this-> _ state为“ active”,则返回“ true”,否则返回false。我看不出您的代码为何有效,而初始代码却无效!?只是好奇... $ session-> getState()!=='active'产生与!$ session-> isActive()相同的结果
fruppel 2015年

@fruppel-我刚刚在Joomla 3.4.5站点上测试了此功能,并且始终1在返回该值,甚至认为它应该返回一个布尔值
Lodder

好的,我也会检查它。也许是个错误
fruppel 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.