जूमला सत्र-> निष्क्रिय () और सत्र का समय पुनर्निर्देशन काम नहीं कर रहा है


9

मैं अपनी वेबसाइट को मुखपृष्ठ पर पुनर्निर्देशित करने की कोशिश कर रहा हूं जब सत्र समाप्त हो जाता है और उपयोगकर्ता स्वतः लॉग आउट हो जाता है (अभी यह जूमला कोर पंजीकरण पृष्ठ पर पुनर्निर्देशित हो जाता है, जो मैं नहीं चाहता कि उपयोगकर्ता मुझे देखें क्योंकि मैंने अपना खुद का बनाया है एक कस्टम घटक में पंजीकरण पृष्ठ)।

अपने टेम्प्लेट की index.php फ़ाइल में, मैं जाँचता हूं कि क्या सत्र सक्रिय है और यदि सत्र समाप्त हो गया है तो पुनर्निर्देशित करें:

$session = JFactory::getSession();

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

जब तक मैंने जूमला 3.4.5 को अद्यतन नहीं किया, तब तक इस समाधान ने ठीक काम किया। अद्यतन के बाद, यहां तक ​​कि जब उपयोगकर्ता स्वचालित रूप से लॉग आउट हो जाता है, तो यह व्यवहार करता है जैसे कि सत्र अभी भी सक्रिय है (मैं जाँचता हूं कि इको के माध्यम से "सत्र सक्रिय है" लाइन, जैसा कि आप ऊपर देख सकते हैं)।

उपयोगकर्ता लॉग आउट होने के बावजूद सत्र अभी भी सक्रिय क्यों है? क्या $ सत्र का एक विकल्प है-> निष्क्रिय () विधि?

जवाबों:


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()इसके बजाय जूमला विधि का उपयोग करेंheader()

उम्मीद है की यह मदद करेगा


बहुत बहुत धन्यवाद !! यही वह है जिसकी तलाश में मैं हूं। यह पूरी तरह से काम किया! एक बार फिर धन्यवाद ! :)
user3716433

@ user3716433 - आपका स्वागत है। कृपया "टिक" आइकन पर क्लिक करके उत्तर को चिह्नित करें
Lodder

वापसी (बूल) ($ यह -> _ राज्य == 'सक्रिय'); हमेशा 1 नहीं लौटेगा, यह "सत्य" लौटाता है यदि $ -> _ राज्य "सक्रिय" है, अन्यथा यह गलत है। मैं नहीं देखता कि आपका कोड क्यों काम करता है और प्रारंभिक कोड नहीं !? बस जिज्ञासु ... $ सत्र-> getState ()! == 'सक्रिय' समान परिणाम पैदा करता है! $ सत्र-> isActive ()
fruppel

@fruppel - मैंने अभी-अभी जूमला 3.4.5 साइट पर इस फ़ंक्शन का परीक्षण किया है और यह हमेशा लौट रहा है 1, यहां तक ​​कि यह भी माना जाता है कि यह बूलियन लौटना चाहिए
Lodder

ठीक है, मैं इसे भी देखूँगा। शायद यह एक बग है
fruppel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.