Joomla Session-> isActive()とセッションタイムアウトリダイレクトが機能しない


9

セッションが期限切れになり、ユーザーが自動的にログアウトしたときに、自分のWebサイトをホームページにリダイレクトしようとしています(現在、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

return(bool)($ this-> _ state == 'active'); $ this-> _ stateが "active"の場合、常に1を返すとは限りません。それ以外の場合は、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.