জুমলা সেশন-> আইএ্যাকটিভ () এবং সেশনের সময়সীমা কাজ করছে না পুনর্নির্দেশ


9

সেশনটির মেয়াদ শেষ হয়ে গেলে এবং ব্যবহারকারী স্বয়ংক্রিয়ভাবে লগ আউট হয়ে যাওয়ার পরে আমি আমার ওয়েবসাইটটি হোমপেজে পুনর্নির্দেশের চেষ্টা করছি (এখনই এটি জুমলা মূল নিবন্ধকরণ পৃষ্ঠায় পুনঃনির্দেশিত হয়ে যায়, যা আমি ব্যবহারকারীকে দেখতে চাই না কারণ আমি আমার নিজস্ব তৈরি করেছি একটি কাস্টম উপাদান নথিভুক্ত পৃষ্ঠা)।

আমার টেমপ্লেটের সূচি.এফপি ফাইলটিতে, আমি সেশনটি সক্রিয় কিনা তা যাচাই করে থাকি এবং সেশনটির মেয়াদ শেষ হলে পুনর্নির্দেশ সম্পাদন করে:

$session = JFactory::getSession();

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

আমি জুমলা ৩.৪.৫ এ আপডেট করার মুহুর্ত পর্যন্ত এই সমাধানটি কার্যকর হয়েছে। আপডেটের পরে, ব্যবহারকারী স্বয়ংক্রিয়ভাবে লগ আউট হওয়া সত্ত্বেও, এটি সেশনটি এখনও সক্রিয় থাকলে এমন আচরণ করে (আপনি উপরে দেখতে পারেন যে প্রতিধ্বনি "সেশন সক্রিয়" লাইনটি পরীক্ষা করে দেখছি)।

ব্যবহারকারী লগ আউট করা সত্ত্বেও কেন অধিবেশনটি সক্রিয়? $ সেশন-> isActive () পদ্ধতির বিকল্প আছে কি?

উত্তর:


7

আপনি যদি সেশন.এফপি ফাইলটি দেখেন তবে আপনি নিম্নলিখিতগুলি দেখতে পাচ্ছেন:

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 - আপনাকে স্বাগতম। উত্তরটি "টিক" আইকনে ক্লিক করে স্বীকৃত হিসাবে চিহ্নিত করুন
লড্ডার

রিটার্ন (bool) ($ এটি -> _ অবস্থা == 'সক্রিয়'); সর্বদা 1 প্রদান করে না, যদি "true এটি -> _ রাষ্ট্র" সক্রিয় "হয় তবে তা" সত্য "ফেরত দেয়, অন্যথায় এটি মিথ্যা ফেরত দেয়। আমি দেখতে পাচ্ছি না কেন আপনার কোড কাজ করে এবং প্রাথমিক কোডটি না !? কেবল কৌতূহল ... $ সেশন-> গেটস্টেট ()! == 'সক্রিয়' একই ফলাফল উত্পন্ন করে! $ অধিবেশন-> ইসঅ্যাকটিভ ()
ফ্রিপেল

@ ফ্রুপেল - আমি একটি জুমলা ৩.৪.৫ সাইটে এই ফাংশনটি সবেমাত্র পরীক্ষা করেছি এবং এটি সর্বদা ফিরে আসবে 1, এমনকি ভেবেছিল এটি একটি বুলিয়ান ফেরত দেবে
লডার

ঠিক আছে আমি এটিও পরীক্ষা করে দেখব। হতে পারে এটি একটি বাগ
815
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.