मैंने सीआई प्रमाणीकरण नियंत्रक बनाया है जिससे उपयोगकर्ता साइट पर लॉग इन कर सकता है, और लॉगिन के बाद मैं उसे पहले देखे गए यूआरएल पर रीडायरेक्ट कर रहा हूं जिसका मैं उपयोग करता रहता हूं:

$this->session->set_flashdata( 'return_url', current_url() );

दुर्भाग्य से यह एक समस्या का कारण बनता है। हर बार जब उपयोगकर्ता ब्राउज़र में एक से अधिक टैब खोलता है तो उस चर को अधिलेखित किया जा रहा है और सफल लॉगिन के बाद उपयोगकर्ता को सभी टैब में एक ही URL पर पुनर्निर्देशित किया जाता है।

तो मेरा प्रश्न है: क्या MY_Controller के अंदर एक कस्टम नियंत्रक लोड करना संभव है? (MY_Controller वह वर्ग है जो extends CI_Controller)

मैंने (MY_Controller के निर्माता के अंदर) का उपयोग करने की कोशिश की, लेकिन यह काम नहीं किया:

$CI =& get_instance();
$CI->router->set_class('authentication');
$CI->router->set_method('login');

संपादित करें: मैं इस समस्या को हल करने के किसी अन्य विचार की सराहना करता हूं।

0
Teneff 5 अक्टूबर 2011, 15:28
नहीं, सीआई में आप एक नियंत्रक को दूसरे के साथ कॉल नहीं कर सकते हैं।
 – 
Damien Pirsy
5 अक्टूबर 2011, 15:33
प्रमाणीकरण के लिए ऑटो-लोडेड मॉडल का उपयोग क्यों नहीं कर रहे हैं? मैंने अपनी प्रमाणीकरण प्रणाली को एक मॉडल के रूप में लिखा और इसे स्वत: लोड किया, और अभी तक कोई समस्या नहीं थी। मैं निर्माण विधि में परिभाषाओं को भी परिभाषित कर रहा हूं, जो मेरे कोड को पढ़ने में आसान + आसान बनाता है।
 – 
Arda
5 अक्टूबर 2011, 15:59

3 जवाब

सबसे बढ़िया उत्तर

एक समाधान सत्र संस्करण में रिटर्न यूआरएल को सहेजना नहीं होगा, लेकिन इसे प्राप्त/पोस्ट पैरामीटर में पास करें (प्राप्त करने के मामले में, ठीक से एन्कोड किया गया, बेस 64 यानी।) यदि कोई (वैध) रिटर्न यूआरएल सेट नहीं है तो एकमात्र अतिरिक्त मानक रिटर्न यूआरएल होना चाहिए

--- संपादित करें मैं बेस 64 के बारे में क्यों बात कर रहा था जब PHP के पास इसके लिए केवल कार्य है; urlencode आपका मित्र है! http://nl3.php.net/urlencode

2
giorgio 10 अक्टूबर 2011, 17:59
base64 के हैश में स्लैश हैं और यह कोडनिर्देशक के url के साथ खिलवाड़ करता है
 – 
Teneff
6 अक्टूबर 2011, 11:17
मैं एन्कोडिंग के बाद हैश में विस्मयादिबोधक चिह्न के साथ सभी स्लैश को बदलकर और स्ट्रिंग को डीकोड करने से पहले उन्हें उलट कर इस स्लैश समस्या से बचने में कामयाब रहा हूं।
 – 
Teneff
6 अक्टूबर 2011, 12:02

नियंत्रक के अंदर एक कस्टम नियंत्रक लोड करने के लिए (जैसे MY_Controller) प्रमाणीकरण नियंत्रक तक पहुंचने के लिए PHP कर्ल का उपयोग करें।

यह प्रदर्शन को प्रभावित कर सकता है क्योंकि यह प्रत्येक अनुरोध पर एक महंगी प्रक्रिया है।

अन्य विकल्पों में बेस क्लास सिस्टम का उपयोग करना शामिल हो सकता है (देखें http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY) या प्रमाणीकरण का ध्यान रखने के लिए एक ऑटो-लोडेड लाइब्रेरी बनाना।

0
jason_hamiltonm 5 अक्टूबर 2011, 15:57

जब आप गैर-लॉग इन उपयोगकर्ताओं को लॉगिन पृष्ठ पर पुनर्निर्देशित कर रहे हैं, तो एक छिपा हुआ चर "redirect_to" रखें, जो उस स्थान से मान रखेगा जहां से उपयोगकर्ता आया है। $_SERVER['HTTP_REFERRER'] का उपयोग किया जा सकता है। फिर लॉगिन के बाद, बस "redirect_to" के मान पर रीडायरेक्ट करें। इस तरह आपको उपयोगकर्ताओं को उनके द्वारा आए यूआरएल से रीडायरेक्ट करने के लिए फ्लैशडेटा सेट करने की आवश्यकता नहीं है।

0
Mahbub 5 अक्टूबर 2011, 16:02
यह $_SERVER['HTTP_REFERER'] है और इसका उपयोग तब नहीं किया जा सकता जब आपने उपयोगकर्ता को php शीर्षलेख के साथ पुनर्निर्देशित किया हो
 – 
Teneff
5 अक्टूबर 2011, 16:42