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