2010-04-16 20 views
9

वैसे यह वास्तव में कोई समस्या नहीं है, लेकिन मैं जांचता हूं कि उपयोगकर्ता मौजूद है या नहीं और उन्हें लॉग इन करें और साइट/सदस्यों_रेरा पर रीडायरेक्ट करें, लेकिन मैं नहीं चाहता उपयोगकर्ता को एक विशिष्ट पृष्ठ पर भेजें लेकिन मैं वर्तमान नियंत्रक को फिर से लोड करना चाहता हूं। तो अगर मैं इंडेक्स/होम में लॉगिन करता हूं तो मैं इंडेक्स/होम पर रीडायरेक्ट करना चाहता हूं, मुझे आगे कैसे बढ़ना चाहिए?कोडनिर्देशक: वर्तमान नियंत्रक (php_self नियमित php में) के बाद लॉगिन करने के लिए रीडायरेक्ट कैसे करें

नियमित php में मैं कार्रवाई में डाल दिया, वर्तमान पृष्ठ पर रीडायरेक्ट करने

<?php echo $_SERVER['PHP_SELF']; ?> 

इस ढांचे

function validate_credentials() 
    {  
     $this->load->model('membership_model'); 
     $query = $this->membership_model->validate(); 

     if($query) // if the user's credentials validated... 
     { 
      $data = array(
       'username' => $this->input->post('username'), 
       'is_logged_in' => true 
      ); 
      $this->session->set_userdata($data); 
      redirect('site/members_area'); //<-- this line here should be dynamic 
     } 
     else // incorrect username or password 
     { 
      $this->index(); 
     } 
    } 

उत्तर

13

मैं हैडर कि हमेशा एक ही लॉगिन नियंत्रक को प्रस्तुत में एक लॉगिन प्रपत्र होने से इस समस्या अपने आप हल है, लेकिन पकड़ है कि हैडर लॉगिन प्रपत्र (जो हर पृष्ठ पर दिखाई देता है) हमेशा एक छिपा रीडायरेक्ट जो वास्तविक लॉगिन नियंत्रक कब्जा बुलाया इनपुट है ...

यहाँ बुनियादी सेट अप (सुनिश्चित करें कि यूआरएल सहायक भरी हुई है) है:

हैडर लॉग इन फार्म

<form action="/login" method="post"> 
    <input type="hidden" name="redirect" value="<?php echo current_url(); ?>" /> 
    <input type="text" name="username" value="" /> 
    <input type="password" name="password" value="" /> 
    <input type="submit" name="login" value="Login" id="submit"> 
</form> 

लॉग इन नियंत्रक फार्म

<form id="login" action="" method="post"> 
    <input type="text" name="username" id="username" value="" /> 
    <input type="password" name="password" id="password" value=""/> 

    <?php if(isset($_POST['redirect'])) : ?> 
    <input type="hidden" name="redirect" value="<?php echo $_POST['redirect']; ?>" /> 
    <?php endif; ?> 

    <input type="submit" name="login" id="submit" value="Login" /> 
</form> 

सबसे अच्छी बात यह आप विफलता पर रीडायरेक्ट और रीडायरेक्ट इनपुट केवल सेट हो जाता है की स्थापना रखने के है अगर आप ' कहीं और से लॉग इन कर रहे हैं।

नियंत्रक

function index() 
{ 
    if(! $this->form_validation->run()) 
    { 
     // do your error handling thing 
    } 
    else 
    { 
     // log the user in, then redirect accordingly 
     $this->_redirect(); 
    } 
} 

function _redirect() 
{ 
    // Is there a redirect to handle? 
    if(! isset($_POST['redirect'])) 
    { 
     redirect("site/members_area", "location"); 
     return; 
    } 

    // Basic check to make sure we aren't redirecting to the login page 
    // current_url would be your login controller 
    if($_POST['redirect'] === current_url()) 
    { 
     redirect("site/members_area", "location"); 
     return; 
    } 

    redirect($_POST['redirect'], "location"); 
} 

यह क्या हो रहा है यहाँ है:

एक अलग पृष्ठ पर
  1. उपयोगकर्ता प्रवेश नहीं हैं।
  2. लॉगिन फॉर्म एक छिपी हुई इनपुट तत्व के साथ एक एकल लॉगिन नियंत्रक को सबमिट करता है जिसमें यह कहता है कि वे कहां से लॉग इन कर रहे हैं।
  3. लॉगिन नियंत्रक लॉगिन को संसाधित करता है, फिर इनपुट के आधार पर रीडायरेक्ट करता है।
  4. असफल लॉगिन पर रीडायरेक्ट फिर से सेट हो रहा है, इसलिए कोई फर्क नहीं पड़ता कि उपयोगकर्ता मूल पृष्ठ पर वापस आ जाएगा।

यह सिर्फ एक बुनियादी उदाहरण है। आप इसे आवश्यकतानुसार स्पष्ट रूप से ट्विक कर सकते हैं।

+0

पर "शीर्षलेख में लॉगिन फ़ॉर्म बनाकर" रीडायरेक्ट करता है .. मुझे खेद है लेकिन मैं वहां खो गया हूं। आपका मतलब क्या है ? –

2

मुझे यकीन है कि एक बेहतर तरीका हो सकता है कर रहा हूँ में कोड है होगा लेकिन जिस तरह से मैं करता हूं वह यह है कि जब उपयोगकर्ता लॉग इन होता है तो चेक $this->session->set_flashdata('redirect_url', current_url()); का उपयोग करता है और फिर इसे लॉगिन फॉर्म के साथ पास करता है, इसलिए मुझे पता है कि उपयोगकर्ता को वापस रीडायरेक्ट करना है।

जैसा कि मैंने कहा, मुझे यकीन है कि ऐसा करने के लिए एक क्लीनर तरीका है लेकिन मुझे निश्चित रूप से $_SERVER['HTTP_REFERER']; पसंद नहीं है क्योंकि यह वास्तव में भरोसा नहीं किया जा सकता है।

+0

तो रीडायरेक्ट ('redirect_url', current_url()); ??? लेकिन यह मुझे एक त्रुटि देता है। – Christophe

+0

आपको यह सुनिश्चित करना होगा कि यूआरएल सहायक लोड हो गया है। क्षमा करें, मुझे इसका उल्लेख करना चाहिए था। यदि ऐसा नहीं है, तो आपको किस प्रकार की त्रुटि मिल रही है? – vernonk

+0

क्षमा करें ... बस फिर से देखा ... यह होगा ... रीडायरेक्ट ($ this-> session-> flashdata ('redirect_url')); – vernonk

10

आप इसे ऐसा कर सकते हैं। सत्र पुस्तकालय और यूआरएल सहायक लोड करने के लिए याद रखें।

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

लॉगिन के साथ ऊपर flashdata दर्रा और का उपयोग कर अनुप्रेषित:

redirect($this->session->flashdata('redirectToCurrent')); 
+1

सत्र पुस्तकालय और यूआरएल हेपर लोड किया गया था। लेकिन मुझे यकीन नहीं है कि कोड कहां रखा जाए, रीडायरेक्ट को निश्चित रूप से लॉगिन नियंत्रक में जोड़ा गया है जो उपयोगकर्ता को लॉग इन करता है लेकिन मुझे यकीन नहीं है कि यह कहां $-> session-> set_flashdata ('redirectToCurrent' कहां रखा जाए, current_url()); मैंने एक ही फ़ंक्शन में दोनों पंक्तियों को जोड़ा लेकिन यह मुझे मुख्य नियंत्रक (अनुक्रमणिका) – Christophe

संबंधित मुद्दे