Joomla Session-> isActive () และการหมดเวลาเซสชันเปลี่ยนเส้นทางไม่ทำงาน


9

ฉันกำลังพยายามเปลี่ยนเส้นทางเว็บไซต์ของฉันไปที่หน้าแรกเมื่อเซสชันหมดอายุและผู้ใช้ออกจากระบบโดยอัตโนมัติ (ตอนนี้จะถูกเปลี่ยนเส้นทางไปยังหน้าการลงทะเบียนหลัก 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 หลังจากการอัพเดตแม้ว่าผู้ใช้จะออกจากระบบโดยอัตโนมัติมันจะทำงานเหมือนกับว่าเซสชันยังคงใช้งานอยู่ (ฉันตรวจสอบว่าผ่านบรรทัด "เซสชันใช้งานอยู่" echo ผ่านตามที่คุณเห็นด้านบน)

เหตุใดเซสชันยังคงทำงานแม้ว่าผู้ใช้จะออกจากระบบแล้ว มีทางเลือกอื่นสำหรับวิธี $ 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'); จะไม่ส่งคืน 1 เสมอมันจะส่งกลับ "true" ถ้า $ this -> _ state เป็น "active" มิฉะนั้นจะส่งคืน 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.