2013-07-09 14 views
19

Ho salvato alcuni dati nella sessione sul mio controller di verifica, quindi estrao i dati di sessione nel modello user_activity e inserisco i dati di sessione nella tabella delle attività. Il mio problema sono solo i dati del nome utente salvati in sessione e posso ottenere e inserire solo i dati del nome utente dopo aver estratto la sessione sul modello. Sono nuovo in Codeigniter. Per questo motivo è molto difficile scoprire il problema. Sto cercando diversi giorni per trovare il problema. Ma sfortunatamente non posso. Quindi, per favore, qualcuno mi aiuti. Grazie controlloreCome salvare ed estrarre i dati di sessione in codeigniter

VerifyLogin: modello

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
session_start(); 
class VerifyLogin extends CI_Controller { 

function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('user','',TRUE); 
    $this->load->model('user_activity','',TRUE); 
    } 

function index() 
{ 
    //This method will have the credentials validation 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); 

    if($this->form_validation->run() == FALSE) 
    { 
    //Field validation failed. User redirected to login page 
    $this->load->view('login_view'); 
    } 
    else 
    { 
    //Go to private area 
    redirect('home', 'refresh'); 
    } 
} 

function check_database($password) 
{ 
    //Field validation succeeded. Validate against database 
    $username = $this->input->post('username'); 
    $vercode = $this->input->post('vercode'); 

    //query the database 
    $result = $this->user->login($username, $password); 

    // ip address 
    $ip_address= $this->user_activity->get_client_ip(); 

    //Retrieving session data and other data 
    $captcha_code=$_SESSION['captcha']; 
    $user_agent=$_SERVER['HTTP_USER_AGENT']; 

    if($result && $captcha_code == $vercode) 
    { 
    $sess_array = array(); 
    foreach($result as $row) 
    { 
     $sess_array = array(
     'username' => $row->username, 
      'user_agent' => $row->user_agent, 
      'ip_address' => $row->ip_address, 
     ); 
     $this->session->set_userdata('logged_in', $sess_array); 

     //insert user activity 
     $this->user_activity->activity(); 
    } 
    return TRUE; 
    } 
    else 
    { 
    $this->form_validation->set_message('check_database', 'Invalid username or password'); 
    return false; 
    } 
} 
} 
?> 

user_activity:

<?php 
    Class User_activity extends CI_Model 
    { 
    function activity() 
    { 
     if($this->session->userdata('logged_in')) 
     { 
     $session_data = $this->session->userdata('logged_in'); 
     // $data['username'] = $session_data['username']; 

      $data = array(
        'session_id'=>"", 
        'ip_address'=>$session_data['ip_address'], 
        'user_agent'=>$session_data['user_agent'], 
        'username'=>$session_data['username'], 
        'time_stmp'=>Now(), 
        'user_data'=>$session_data['username']."Logged in Account" 
       ); 
     $this->db->insert('user_activity',$data);   
     } 
     else 
     { 
      return false; 
     } 

     // Function to get the client ip address 
    function get_client_ip() { 
     $ipaddress = ''; 
     if ($_SERVER['HTTP_CLIENT_IP']) 
      $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
     else if($_SERVER['HTTP_X_FORWARDED_FOR']) 
      $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
     else if($_SERVER['HTTP_X_FORWARDED']) 
      $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
     else if($_SERVER['HTTP_FORWARDED_FOR']) 
      $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
     else if($_SERVER['HTTP_FORWARDED']) 
      $ipaddress = $_SERVER['HTTP_FORWARDED']; 
     else if($_SERVER['REMOTE_ADDR']) 
      $ipaddress = $_SERVER['REMOTE_ADDR']; 
     else 
      $ipaddress = 'UNKNOWN'; 

     return $ipaddress; 
     } 
     } 
    } 
    ?> 
+1

do $ session_data = $ this-> session-> set_userdata ($ sess_array) ; cfr. http://ellislab.com/codeigniter/user-guide/libraries/sessions.html section Aggiunta di dati di sessioni personalizzate – qwertzman

+0

Vedere l'esempio: http://devgambit.com/how-to-store-and-get-session-value -in-codeigniter/ –

risposta

45

È possibile impostare i dati di sessione semplicemente come questo in Codeigniter:

$this->load->library('session'); 
$this->session->set_userdata(array(
    'user_id' => $user->uid, 
    'username' => $user->username, 
    'groupid' => $user->groupid, 
    'date'  => $user->date_cr, 
    'serial' => $user->serial, 
    'rec_id' => $user->rec_id, 
    'status' => TRUE 
)); 

e si può ottenere in questo modo :

$u_rec_id = $this->session->userdata('rec_id'); 
$serial = $this->session->userdata('serial'); 
+0

Carico la sessione in caricamento automatico. nome utente salvato correttamente ma altri dati non salvati. – user2365514

5

inizializzare la classe Session nel costruttore del controller utilizzando

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

ad esempio:

function __construct() 
    { 
    parent::__construct(); 
    $this->load->model('user','',TRUE); 
    $this->load->model('user_activity','',TRUE); 
    $this->load->library('session'); 
    } 
+1

Carico la sessione in caricamento automatico. nome utente salvato correttamente ma altri dati non salvati. – user2365514

+0

@ user2365514, sto affrontando lo stesso problema come hai commentato. Potresti dirmi come hai effettivamente risolto? –

13

Prima di caricare la libreria di sessione.

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

È possibile caricarlo in modalità di caricamento automatico, che ritengo sia meglio.

Per impostare sessione

$this->session->set_userdata("SESSION_NAME","VALUE"); 

per estrarre i dati

$this->session->userdata("SESSION_NAME"); 
1

In codeigniter siamo in grado di memorizzare valori di sessione in un database. Nel file config.php rendono il sess_use_database variabile true

$config['sess_use_database'] = TRUE; 
$config['sess_table_name'] = 'ci_sessions'; 

e creare una tabella nel database ci_session

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL, 
    ip_address varchar(45) DEFAULT '0' NOT NULL, 
    user_agent varchar(120) NOT NULL, 
    last_activity int(10) unsigned DEFAULT 0 NOT NULL, 
    user_data text NOT NULL, 
    PRIMARY KEY (session_id), 
    KEY `last_activity_idx` (`last_activity`) 
); 

Per maggiori dettagli e di riferimento, click here

1

CI Session Classe tenere traccia delle informazioni su ogni utente mentre navigano sul sito. La sessione Session genera i propri dati di sessione, offrendo una maggiore flessibilità per gli sviluppatori.

inizializzazione di una sessione

Per inizializzare manualmente la classe Session nel nostro uso del costruttore del controller seguente codice.

Aggiunta di dati personalizzato Sessione

possiamo aggiungere i nostri dati personalizzati in ordine di sessione.Per aggiungere i nostri dati all'array di sessione è necessario passare una matrice contenente i nuovi dati a questa funzione.

$this->session->set_userdata($newarray); 

Dove $ newarray è un array associativo contenente i nostri nuovi dati.

$newarray = array('name' => 'manish', 'email' => '[email protected]'); $this->session->set_userdata($newarray); 

Recupero Sessione

$ session_id = $ this-> session-> userdata ('session_id');

La funzione sopra restituisce FALSE (booleano) se l'array di sessione non esiste.

Recupero di tutto Session Data

$ this-> session-> all_userdata()

ho preso riferimento dal http://www.tutsway.com/codeigniter-session.php.

0

In CodeIgniter è possibile memorizzare il valore della sessione come singolo o anche in formato array come di seguito:

Se si desidera memorizzare i dati di qualsiasi utente in sessione come userId, username, userContact ecc, allora si dovrebbe conservare in matrice:

<?php 
$this->load->library('session'); 
$this->session->set_userdata(array(
'userId' => $user->userId, 
'userName' => $user->userName, 
'userContact ' => $user->userContact 
)); 
?> 

Entrare in dettagli con Esempio demo:

http://devgambit.com/how-to-store-and-get-session-value-in-codeigniter/

Problemi correlati