php – 管理Joomla会话超时

我有一个自定义组件,其形式简单,我正在努力如何管理会话超时.如果用户点击另一个链接,他们将被Joomla自动重定向.他们被重定向到登录组件,成功登录后,他们会转到他们上次点击的页面.这正是我想要的.

然而问题在于形式.如果用户超时并且没有意识到,那么他们填写此表单并点击提交,他们将在同一页面上留下默认会话超时消息.为什么不重定向到登录组件?

我想我需要在我的代码中处理这种情况,所以当我的表单被提交时,它会在我的控制器中调用这个函数:

function process()
{
   $user = JFactory::getUser();     

    if ($user->id)
    {
        //process form
    }
    else //give warning and bring them to a page upon successful login
    {
        JError::raiseWarning( 100, JText::_('You have timed out. Please login again.') );
        JFactory::getApplication()->redirect(JRoute::_('my-account'));
    }

}

但这不起作用,我得到相同的Joomla默认会话超时消息.我也尝试获取会话而不是检查用户,但这也不起作用.

$session = JFactory::getSession();
if ($session->isActive()) 
{
    //process form
}
else
{
    JError::raiseWarning( 100, JText::_('You have timed out. Please login again.') );
    JFactory::getApplication()->redirect(JRoute::_('my-account'));

}

有任何想法吗?

最佳答案 您可以通过将以下代码添加到表单HTML来防止表单超时:

<?php
  JHTML::_('behavior.keepalive');
?>
点赞