Joomla session-> isActive () & chuyển hướng hết thời gian phiên không hoạt động


9

Tôi đang cố gắng chuyển hướng trang web của mình đến trang chủ khi phiên hết hạn và người dùng sẽ tự động đăng xuất (ngay bây giờ nó được chuyển hướng đến trang đăng ký lõi j Joomla, tôi không muốn người dùng thấy vì tôi đã tự tạo trang đăng ký trong một thành phần tùy chỉnh).

Trong tệp index.php của mẫu của tôi, tôi kiểm tra xem phiên có hoạt động không và thực hiện chuyển hướng nếu phiên hết hạn:

$session = JFactory::getSession();

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

Giải pháp này hoạt động tốt cho đến thời điểm tôi cập nhật lên Joomla 3.4.5. Sau khi cập nhật, ngay cả khi người dùng đăng xuất tự động, nó vẫn hoạt động như thể phiên vẫn đang hoạt động (tôi kiểm tra xem qua dòng "phiên đang hoạt động" như bạn có thể thấy ở trên).

Tại sao phiên vẫn hoạt động ngay cả khi người dùng đã đăng xuất? Có một sự thay thế cho phương thức $ session-> isActive () không?

Câu trả lời:


7

Nếu bạn nhìn vào tệp session.php, bạn sẽ thấy như sau:

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

Đó là chức năng bạn đang gọi. Tôi không chắc liệu điều này đã được thực hiện có chủ đích hay nếu đó là một sai lầm, nhưng nó sẽ luôn trở lại 1.

Thay vào đó, bạn sử dụng:

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

Cái nào sẽ trả về một cái sau:

  • không hoạt động
  • hoạt động
  • hết hạn
  • bị phá hủy
  • lỗi

Sau đó, bạn có thể dựa vào iftuyên bố của mình về điều này, ví dụ:

$session = JFactory::getSession();

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

Bên cạnh đó, tôi khuyên bạn nên sử dụng JFactory::getApplication()->redirect()phương pháp Joomla thay vìheader()

Hi vọng điêu nay co ich


Cám ơn rất nhiều !! Điều này thật đúng với gì mà tôi đã tìm kiếm. Nó hoạt động hoàn hảo! Cảm ơn một lần nữa! :)
dùng3716433

@ user3716433 - Bạn được chào đón. Vui lòng đánh dấu câu trả lời là được chấp nhận bằng cách nhấp vào biểu tượng "đánh dấu"
Lodder

return (bool) ($ this -> _ state == 'active'); sẽ không luôn trả về 1, nó trả về "true" nếu $ this -> _ state là "active", nếu không nó trả về false. Tôi không thấy lý do tại sao mã của bạn hoạt động và mã ban đầu không!? Chỉ tò mò ... $ session-> getState ()! == 'active' tạo ra kết quả tương tự như! $ Session-> isActive ()
fruppel

@fruppel - Tôi vừa thử nghiệm chức năng này trên trang web Joomla 3.4.5 và nó luôn quay trở lại 1, thậm chí còn nghĩ rằng nó sẽ trả lại một boolean
Lodder 8/12/2015

Ok thx tôi cũng sẽ kiểm tra nó. Có lẽ đó là một lỗi
fruppel 8/12/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.