web-dev-qa-db-fra.com

Comment sauvegarder et extraire les données de session dans codeigniter

J'enregistre des données en session sur mon contrôleur de vérification, puis j'extrais ces données de session dans le modèle user_activity et les insère dans la table d'activités. Mon problème est uniquement les données de nom d'utilisateur enregistrées dans la session et je peux obtenir et insérer uniquement les données de nom d'utilisateur après l'extraction de la session sur le modèle. Je suis nouveau dans Codeigniter. C’est pour cette raison qu’il est très difficile de connaître le problème. J'essaie plusieurs jours pour trouver le problème. Mais malheureusement je ne peux pas. Alors s'il vous plaît, quiconque m'aide. Merci

Contrôleur VerifyLogin:

<?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;
   }
 }
}
?>

modèle 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;
       }
      }
    }
    ?>
23
user2365514

Vous pouvez définir les données en session simplement comme ceci dans 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
));

et vous pouvez l'obtenir comme ceci:

$u_rec_id = $this->session->userdata('rec_id');
$serial = $this->session->userdata('serial');
49
Mehdi Jalal

D'abord, vous avez la bibliothèque de session de chargement. 

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

Vous pouvez le charger en chargement automatique, ce qui, à mon avis, est préférable. 

Pour définir la session

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

Extraire des données

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

initialiser la classe Session dans le constructeur du contrôleur en utilisant 

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

par exemple :

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

Dans codeigniter, nous pouvons stocker les valeurs de session dans une base de données . Dans le fichier config.php, définissez la variable sess_use_database true

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

et créer une table ci_session dans la base de données

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`)
);

Pour plus de détails et de références, cliquez ici

3
Prabin Tp

La classe de session CI fournit des informations de suivi sur chaque utilisateur lorsqu’il navigue sur site.Ci La classe de session génère ses propres données de session, offrant plus de flexibilité aux développeurs. 

Initialisation d'une session

Pour initialiser manuellement la classe Session dans notre constructeur de contrôleur, utilisez le code suivant.

Ajout de données de session personnalisées

Nous pouvons ajouter nos données personnalisées dans un tableau de session. Pour ajouter nos données au tableau de session, vous devez transmettre un tableau contenant vos nouvelles données à cette fonction.

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

Où $ newarray est un tableau associatif contenant nos nouvelles données.

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

Récupération de session 

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

La fonction ci-dessus renvoie FALSE (boolean) si le tableau de session n'existe pas.

Récupération de toutes les données de la session

$ this-> session-> all_userdata ()

J'ai pris référence à http://www.tutsway.com/codeigniter-session.php .

2
Manish

Dans CodeIgniter, vous pouvez stocker la valeur de votre session sous forme individuelle ou sous forme de tableau, comme ci-dessous:

Si vous souhaitez stocker les données d’un utilisateur dans une session telles que userId, userName, userContact, etc., vous devez alors stocker dans un tableau:

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

Obtenez des détails avec Example Demo:

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

0
Chetan Panchal