4

シンプルなフォームのカスタム コンポーネントがあり、セッション タイムアウトの管理に苦労しています。ユーザーが別のリンクをクリックすると、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'));

}

何か案は?

4

1 に答える 1

2

次のコードをフォーム HTML に追加することで、フォームがタイムアウトしないようにすることができます。

<?php
  JHTML::_('behavior.keepalive');
?>
于 2013-11-09T11:13:33.593 に答える