Sesi Joomla-> isActive () & pengalihan timeout sesi tidak berfungsi

9

Saya mencoba mengalihkan situs web saya ke beranda ketika sesi berakhir dan pengguna secara otomatis keluar (sekarang ini akan diarahkan ke halaman pendaftaran inti joomla, yang saya tidak ingin pengguna melihat karena saya telah membuat sendiri halaman pendaftaran dalam komponen khusus).

Dalam file index.php pada templat saya, saya memeriksa apakah sesi aktif dan melakukan arahan ulang jika sesi berakhir:

$session = JFactory::getSession();

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

Solusi ini berfungsi dengan baik hingga saat saya memperbarui ke Joomla 3.4.5. Setelah pembaruan, bahkan ketika pengguna keluar secara otomatis, berperilaku seolah-olah sesi masih aktif (saya memeriksa bahwa melalui gema "sesi aktif", seperti yang Anda lihat di atas).

Mengapa sesi ini masih aktif bahkan jika pengguna keluar? Apakah ada alternatif untuk metode $ session-> isActive ()?

pengguna3716433
sumber

Jawaban:

7

Jika Anda melihat file session.php, Anda melihat yang berikut:

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

Yang merupakan fungsi yang Anda panggil. Saya tidak yakin apakah ini dilakukan dengan sengaja atau apakah itu suatu kesalahan, tetapi itu akan selalu kembali 1.

Sebaliknya, Anda menggunakan:

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

Yang akan mengembalikan satu jika yang berikut:

  • non-aktif
  • aktif
  • kedaluwarsa
  • dihancurkan
  • kesalahan

Anda kemudian dapat mendasarkan ifpernyataan Anda pada ini, misalnya:

$session = JFactory::getSession();

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

Sebagai catatan, saya sarankan menggunakan JFactory::getApplication()->redirect()metode Joomla bukanheader()

Semoga ini membantu

Lodder
sumber
Terima kasih banyak !! Inilah yang saya cari. Itu bekerja dengan sempurna! Terima kasih lagi ! :)
user3716433
@ user3716433 - Sama-sama. Tandai jawaban sebagai diterima dengan mengklik ikon "centang"
Lodder
return (bool) ($ this -> _ state == 'active'); tidak akan selalu mengembalikan 1, ia mengembalikan "true" jika $ this -> _ state "aktif", jika tidak maka mengembalikan false. Saya tidak mengerti mengapa kode Anda bekerja dan kode awal tidak !? Hanya ingin tahu ... $ session-> getState ()! == 'aktif' menghasilkan hasil yang sama seperti! $ Session-> isActive ()
fruppel
@fruppel - Saya baru saja menguji fungsi ini di situs Joomla 3.4.5 dan selalu kembali 1, bahkan berpikir itu seharusnya mengembalikan boolean
Lodder
Ok thx saya akan memeriksanya juga. Mungkin itu bug
fruppel