2010-04-16 30 views
9

Bu gerçekten bir sorun değil ama kullanıcının var olup olmadığını kontrol edip oturum açıp site/members_area adresine yönlendiriyorum. kullanıcıyı belirli bir sayfaya gönderirim ancak mevcut denetleyiciyi yeniden yüklemek istiyorum. Yani, eğer indeks/home girişinde olursam indeks/home'da yönlendirilmek istiyorum, nasıl devam etmeliyim?codeigniter: geçerli denetleyiciden sonra yeniden yönlendirme (normal php'de php_self)

düzenli php Ben

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

Bu çerçevede

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(); 
     } 
    } 

cevap

13

ama yakalamak İşte

kurmak temel (url yardımcı yüklendiğinden emin olun) var ... (her sayfada görünen) başlık giriş formu her zaman gerçek giriş kontrolörü yakalar yönlendirme adlı gizli girişine sahip olmasıdır:

Header Giriş Formu

<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> 

Giriş Kontrol Formu

<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> 

iyi parçası sadece ayarlanmış olur başarısızlık üzerine yönlendirme ve yönlendirme giriş ayarını tutmak olup olmadığını' başka bir yerden giriş yapmak.

Kontrolör

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"); 
} 

Burada oluyor şudur: farklı bir sayfaya

  1. kullanıcı girişleri.
  2. Oturum açma formu, giriş yaptıklarını belirten bir gizli giriş elemanına sahip tek bir giriş denetleyicisine gönderir.
  3. Oturum açma denetleyicisi giriş işlemini işler, daha sonra girişe göre yönlendirir.
  4. Başarısız oturum açmada, yeniden yönlendirme yeniden ayarlanmaya devam eder, dolayısıyla ne olursa olsun, kullanıcı orijinal sayfaya dönecektir.

Bu yalnızca temel bir örnektir. Belli ki gerektiği gibi ayarlayabilirsin.

+0

"başlığa giriş formunu girerek" yeniden yönlendirir. Üzgünüm ama o anda kayboldum. Ne demek istedin ? –

2

daha iyi bir yolu olabilir eminim içinde kodudur geçerli sayfaya yönlendirmek için eylem koyardı Ancak, kullanıcı oturum açma işlemi başarısız olursa, $this->session->set_flashdata('redirect_url', current_url()); numaralı telefonu kullanıyorum ve daha sonra kullanıcı adıyla yeniden yönlendirmek için giriş formuyla birlikte iletiyorum.

Dediğim gibi, bunu yapmanın daha temiz bir yolu olduğundan emin değilim ama kesinlikle güvenilir olamayacağından kesinlikle $_SERVER['HTTP_REFERER'];'u beğenmedim.

+0

böylece yönlendirme ('redirect_url', current_url()); ??? ama bana bir hata veriyor. – Christophe

+0

URL yardımcısının yüklü olduğundan emin olmalısınız. Üzgünüm, bundan bahsetmeliydim. Eğer öyle değilse, ne tür bir hata alıyorsunuz? – vernonk

+0

Üzgünüm ... sadece tekrar baktı ... Bu olurdu ... yönlendirme ($ this-> session-> flashdata ('redirect_url')); – vernonk

10

Bunu böyle yapabilirsiniz. Oturum kütüphanesini ve URL yardımcısını yüklemeyi unutmayın.

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

girişle birlikte yukarıda flashdata geçmek ve kullanma yönlendirme: Hep bir giriş kontrolöre gönderir başlığında bir giriş formunu alarak bu sorunu kendim çözüldü

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

oturum kütüphanesi ve url heper yüklendi. Ancak kodu nereye koyacağımı bilemiyorum, tabiki kullanıcı olarak giriş yapan giriş denetleyicisine yeniden yönlendirme eklenir ancak $ this-> session-> set_flashdata ('redirectToCurrent') nereye koyacağımı bilmiyorum current_url()); Her iki satırı da aynı işleve ekledim ancak tekrar ana girişe (indeks) – Christophe