2013-08-27 15 views
12

Ciao ho creato una sessione in Codeigniter ho impostato la variabile di sessione nel mio modello. Ma dopo aver impostato il valore della variabile di sessione quando chiamo variabile di sessione nella mia vista tramite Controller, il valore della variabile di sessione diventa nullo. Qualsiasi aiuto???Variabile di sessione in Codeigniter che non funziona

Aggiornamento

questo è il mio modello in cui ho impostato la mia variabile di sessione

function login ($username, $password) 

    { 
     $this->db->where('username' , $username); 
     $this->db->where('password', $password); 

     $query = $this->db->get('users'); 

     if ($query->num_rows()>0) 

     { 
      foreach ($query->result() as $rows) 
      { 
       $data = array(

        'user_name' => $rows->username, 
        'logged_in' => TRUE, 
        'validated' => true 
       ); 
      } 

       $this->session->set_userdata($data); 
       //$user = $rows->username; 
       //$this->session->set_userdata('user_name', $user); 

       return true; 
     } 

     else 

     { 
      return false; 
     } 

    } 

Qui è il mio controller da dove reindirizzare alla vista

public function verification() 

    { 
     $username = $this->input->post('username'); 
     $password = $this->input->post('password'); 


     $result = $this->site_model->login($username, $password); 


     //$result = $this->session->set_userdata('validated'); 

     if ($result) 
     { 
      //$this->admin(); 
      //$this->session->set_userdata('login_state', TRUE); 

      redirect ('site/index'); 

     } 
     else 
     { 

      redirect ('site/login'); 
      //$this->load->view('login'); 
     } 
    } 

ho chiamato la session_start(); nel controller sotto construct();

e questo è come accedo la variabile di sessione a mio avviso

<?php if ($this->session->userdata('user_name') != "") { ?> 

..... 
+0

Potresti incollare i tuoi codici? – Bora

+1

Dov'è il tuo codice –

+0

Hai 'session_start()' nella parte superiore di tutti i file rilevanti, lo prendo? –

risposta

0

applicazioni uso autoload/config/autoload.php, per aggiungere la sessione liblary e rimuovere session_start();

$autoload['libraries'] = array('session'); 

modello di dati passaggio pubblicare vithout varibles, si può fare così:

regolatore:

public function verification() 
{ 
    $result = $this->site_model->login(); 

     if ($result){ 
      redirect ('site/index'); 
     } else { 
      redirect ('site/login'); 
     } 
} 

Modello:

public function login() 
{ 
    $this->db->where('username' , $this->input->post('username')); 
    $this->db->where('password', $this->input->post('password')); 

    $query = $this->db->get('users'); 

    if ($query->num_rows()>0) 

    { 
     $res = $query->row_array(); 

     $data = array(
      'user_name' => $res['username'], 
      'logged_in' => TRUE, 
      'validated' => true 
     ); 


     $this->session->set_userdata($data); 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

ho provato questo ma non ha funzionato ... – Abbasi

0

impostare la variabile di sessione controller .. questo funziona per me bello

modello

function Login($email,$pass){ 
     $this->db->where('username' ,$email); 
     $this->db->where('password',$pass); 
     $query=$this->db->get('users');  
    if ($query->num_rows == 1) {   
    return true;  
    }  
    return FALSE; 
    } 

Controller:

 function varification(){ 
      $this->load->model('login_model'); 
    $email=$this->input->post('email'); 
    $pass=$this->input->post('pass'); 
    $success=$this->login_model->Login($email,$pass); 
    if ($success) { 
       $data = array(
         'user_name' => $rows->username, 
         'logged_in' => TRUE, 
         'validated' => true 
       ); 
       $this->session->set_userdata($data); 
       redirect ('site/index'); 
    } else{ // incorrect id or password 
      redirect ('site/login'); 
      } 
    } 

ora se eco <?php echo $this->session->userdata('user_name');?> mostrerà il nome utente sessione. si può eco ovunque anche in view.hope questo vi aiuterà a

0

Non è necessario utilizzare il php nucleo session_start(); assicurarsi di avere caricato biblioteca sessione autoload.php

come:

$autoload['libraries'] = array("session"); 

oppure si può caricare la libreria sessione manualmente: come

$this->load->library('session'); 

Per la documentazione completa È possibile fare riferimento: Read Documentation

0

si prega di utilizzare questo codice per impostare la sessione in codeigniter

$this->session->set_userdata('user_session', $user_session_data); 

ho avuto lo stesso problema e ha ottenuto risolto utilizzando questo code.Hope funziona anche per te !.

0

Impostare le variabili di sessione in Model, non è una buona idea per qualsiasi framework CMV (come codeigniter). Modifica la funzione del vostro modello login() quindi restituisce un bel set di informazioni ...

function login ($username, $password) 
    { 
     $this->db->where('username' , $username); 
     $this->db->where('password', $password); 

     $query = $this->db->get('users'); 
     if ($query->num_rows()>0) 
     { 
      foreach ($query->result() as $rows) 
      { 
       $data = array(
        'user_name' => $rows->username, 
        'logged_in' => TRUE, 
        'validated' => true 
       ); 
      } 
      return $data; 
     } 
     else 
     { 
      return false; 
     } 
    } 

... e gestire la sessione dal controller.

public function verification() 
    { 
     $username = $this->input->post('username'); 
     $password = $this->input->post('password'); 

     $result = $this->site_model->login($username, $password); 

     if ($result == false) 
     { 
      redirect ('site/login'); 
      //$this->load->view('login'); 
     } 
     else 
     { 
      $this->session->set_userdata($result); 
      redirect ('site/index'); 
     } 
    } 

Inoltre, al fine di avere i dati della sessione a disposizione il file di vista, è necessario passare loro attraverso il controller

$data['user_name'] = $this->session->userdata('user_name'); 

e quindi si può fare tutto ciò nel file visualizzazione:

<?php if ($user_name != "") { ?> 
0

Ciao penso che sia necessario modificare il codice modello Si sta impostando la matrice in sessione e si accede al nome utente diretto nella sessione

Credo che al di sotto di codice lavorerà per voi,

function login ($username, $password) 
{ 

    $this->db->where('username' , $username); 

    $this->db->where('password', $password); 

    $query = $this->db->get('users')->row(); 

    if (count($query) > 0) 

    { 

      $this->session->set_userdata('user_name', $query->username); 
      $this->session->set_userdata('logged_in', true); 
      $this->session->set_userdata('validated', true); 

      return true; 
    } 

    else 

    { 
     return false; 
    } 

} 
0

si prega di seguire le istruzioni qui di seguito.

assicurati di aver aggiunto una sessione di lib in file autoload.php in modo che la sessione venga caricata automaticamente.

Quando si utilizza la sessione in codificatore, non è necessario aggiungere session_start() all'inizio del file perché il sistema core codificatore sarà gestito automaticamente.

È consigliabile impostare le variabili di sessione nel controller anziché nel modello.

Spero che questo ti aiuti a risolvere il tuo problema.

grazie.

0

Ecco la mia soluzione, speranza aiuterà ..: D

nel modello .. ho copia incolla con il codice qui sotto, ma a cambiare un po '..

function login ($username, $password) 

    { 
     $this->db->where('username' , $username); 
     $this->db->where('password', $password); 

     $query = $this->db->get('users'); 

     if ($query->result())//if any record 
     { 
      $rows = $query->row(); 

      $data = array(
        'user_name' => $rows->username, 
        'logged_in' => TRUE, 
        'validated' => true 
      ); 
      $this->session->set_userdata($data); 
      return true;  
     } 
     else 
     { 
      return false; 
     } 

    } 

eliminare il tuo session_start() in controller, quindi nella tua applicazione/config/autoload.php

in questo $ autoload ['libraries'] = array(); => aggiungi sessione come questa $ autoload ['libraries'] = array ('session');

Grazie ..: D

1

prima di tutto nella CI non è necessario usare session_start() ovunque. solo sessione di caricamento automatico nel file config/autoload.php.

Rimuovere session_start(). Prova a usare flashdata. Flashdata è una sessione temporanea utilizzata principalmente nel tipo di caso in cui è necessario reindirizzare l'utente a un'altra pagina e visualizzare alcuni messaggi di successo o di errore.

  1. Set flashdata: $ this-> session-> set_flashdata ('voce', 'valore');

  2. get flashdata: $ this-> sessione-> flashdata ('articolo');

ecco il link di documentazione http://www.codeigniter.com/user_guide/libraries/sessions.html#flashdata

0

sessione php predefinita dell'utente, come session_start() e $_SESSION, si sta lavorando per me. in php codeignatore

Problemi correlati