Я сохраняю некоторые данные в сеансе на моем контроллере проверки, затем я извлекаю данные сеанса в модель user_activity и вставляю данные сеанса в таблицу действий. Моя проблема заключается только в данных имени пользователя, сохраненных в сеансе, и я могу получить и вставить только данные имени пользователя после извлечения сеанса на модели. Я новичок в Codeigniter. По этой причине очень сложно найти проблему. Я пытаюсь несколько дней найти проблему. Но, к сожалению, я не могу. Так что, пожалуйста, помогите мне. благодаря
Контроллер 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; } } } ?>
Модель 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; } } } ?>
Вы можете установить данные для сеанса просто так в 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 ));
и вы можете получить его так:
$u_rec_id = $this->session->userdata('rec_id'); $serial = $this->session->userdata('serial');
Сначала у вас есть библиотека сеансов загрузки.
$this->load->library("session");
Вы можете загрузить его в автоматическую загрузку, что, я думаю, лучше.
Чтобы установить сеанс
$this->session->set_userdata("SESSION_NAME","VALUE");
Чтобы извлечь данные
$this->session->userdata("SESSION_NAME");
инициализировать класс Session в конструкторе контроллера, используя
$this->load->library('session');
например :
function __construct() { parent::__construct(); $this->load->model('user','',TRUE); $this->load->model('user_activity','',TRUE); $this->load->library('session'); }
Класс сеанса CI отслеживает информацию о каждом пользователе во время просмотра сайта. Класс Ci Session генерирует свои собственные данные сеанса, предлагая большую гибкость для разработчиков.
Инициализация сеанса
Для инициализации класса Session вручную в нашем конструкторе контроллера используйте следующий код.
Добавление пользовательских данных сеанса
Мы можем добавить наши пользовательские данные в массив сеансов. Чтобы добавить наши данные в массив сеанса, необходимо передать массив, содержащий ваши новые данные, в эту функцию.
$this->session->set_userdata($newarray);
Где $ newarray – ассоциативный массив, содержащий наши новые данные.
$newarray = array( 'name' => 'manish', 'email' => 'manish@our-site.com'); $this->session->set_userdata($newarray);
Получение сеанса
$ session_id = $ this-> session-> userdata ('session_id');
Выше функция возвращает FALSE (логическая), если массив сеанса не существует.
Получение всех данных сеанса
$ This-> session-> all_userdata ()
Я ссылался на http://www.tutsway.com/codeigniter-session.php .
В codeigniter мы можем хранить значения сеанса в базе данных. В файле config.php сделайте переменную sess_use_database true
$config['sess_use_database'] = TRUE; $config['sess_table_name'] = 'ci_sessions';
и создать таблицу 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`) );
Для получения дополнительной информации и справки нажмите здесь
В CodeIgniter вы можете сохранить свое значение сеанса как одно или в формате массива, как показано ниже:
Если вы хотите хранить данные любого пользователя в сеансе, такие как userId, userName, userContact и т. Д., Вы должны хранить в массиве:
<?php $this->load->library('session'); $this->session->set_userdata(array( 'userId' => $user->userId, 'userName' => $user->userName, 'userContact ' => $user->userContact )); ?>
Подробные сведения см. В примере Demo:
http://devgambit.com/how-to-store-and-get-session-value-in-codeigniter/