Joomla Session-> isActive () ve oturum zaman aşımı yönlendirmesi çalışmıyor


9

Oturum sona erdiğinde ve kullanıcı otomatik olarak oturumu kapattığında web sitemi ana sayfaya yönlendirmeye çalışıyorum (şu anda kullanıcının kendi oluşturduğum için görmesini istemediğim joomla çekirdek kayıt sayfasına yönlendiriliyor özel bir bileşendeki kayıt sayfası).

Şablonumun index.php dosyasında, oturumun etkin olup olmadığını kontrol ediyorum ve oturumun süresi dolduysa bir yönlendirme gerçekleştiriyorum:

$session = JFactory::getSession();

if (!$session->isActive()) {
   echo "session is expired";   
   header('Location: http://www.example.com/');
   exit;
 }else{
   echo "session is active";
 }

Bu çözüm Joomla 3.4.5 sürümüne güncellediğim ana kadar işe yaradı. Güncellemeden sonra, kullanıcı otomatik olarak oturumu kapatmış olsa bile, oturum hala etkinmiş gibi davranır (yukarıda görebileceğiniz gibi echo "session active" satırından kontrol ederim).

Kullanıcı oturumu kapatmış olsa bile oturum neden hala etkin? $ Session-> isActive () yöntemine bir alternatif var mı?

Yanıtlar:


7

Session.php dosyasına bakarsanız aşağıdakileri görürsünüz:

public function isActive()
{
    return (bool) ($this->_state == 'active');
}

Aradığınız işlev budur. Bunun kasıtlı olarak yapılıp yapılmadığından veya bir hata olup olmadığından emin değilim, ancak her zaman geri dönecek 1.

Bunun yerine şunları kullanırsınız:

$session = JFactory::getSession();
echo $session->getState();

Hangisi aşağıdakileri döndürür:

  • pasif
  • aktif
  • süresi doldu
  • yerlebir edilmiş
  • hata

Daha sonra ifadenizi buna dayandırabilirsiniz if, örneğin:

$session = JFactory::getSession();

if ($session->getState() !== 'active') 
{
    echo 'session is not active';   
    header('Location: http://www.example.com/');
    exit;
}
else
{
    echo 'session is active';
}

Bir yan notta, JFactory::getApplication()->redirect()yerine Joomla yöntemini kullanmanızı öneririmheader()

Bu yardımcı olur umarım


Çok teşekkürler !! Tam da aradığım şey buydu. Mükemmel çalıştı! Tekrar teşekkürler ! :)
user3716433

@ user3716433 - Rica ederim. Lütfen cevabı "kene" simgesini tıklayarak kabul edildi olarak işaretleyin
Lodder

return (bool) ($ this -> _ state == 'etkin'); her zaman 1 döndürmez, $ this -> _ state "active" ise "true" değerini döndürür, aksi takdirde false değerini döndürür. Kodunuzun neden çalıştığını görmüyorum ve ilk kod çalışmıyor !? Just curious ... $ session-> getState ()! == 'active',! $
Session-

@fruppel - Bu işlevi bir Joomla 3.4.5 sitesinde test ettim ve 1bir boole döndürmesi gerektiğini düşündüğümde bile her zaman geri dönüyor
Lodder

Tamam teşekkürler ben de kontrol edeceğim. Belki de bir hata
fruppel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.