我正在使用codeigniter 3.1,我希望用会话中的用户名和用户ID跟踪用户并将其存储到数据库表中。所以我在数据库中创建了codeigniter 3.1会话表。这是
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(40) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`user_id` varchar(45) NOT NULL,
`username` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
PRIMARY KEY (id),
KEY `ci_sessions_timestamp` (`timestamp`)
);
此外还更改了config.php
个会话
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_sessions';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';//its your table name name
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
这是我的会话控制器功能
public function session_test($value='')
{
$newdata = array(
'username' => 'johndoe',
'user_id' => 3,
'logged_in' => TRUE
);
$this->session->set_userdata("userdata",$newdata);
$session_id = $this->session->userdata('userdata');
echo "<pre>";
print_r($session_id);
echo "</pre>";
}
此处输出显示在浏览器中
Array
(
[username] => johndoeasdas
[user_id] => johndasdasoe@some-site.com
[logged_in] => 1
)
并存储在数据库中这是作为数据库中存储的会话的图像
此处我无法将会话中的用户名和user_id存储到数据库中。
如何将session和user_id从session存储到数据库表中。
感谢所有建议。
答案 0 :(得分:2)
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`)
);
此表将存储您的会话数据。现在我们需要设置config变量。转到“application / config / config.php”并更新以下变量:
$config['sess_driver'] = 'database'; //by deafault it may be 'files'
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
现在使用
存储会话数据$data = array(
'name' => 'xyz', //some value
'is_logged_in' => TRUE
);
$this->session->set_userdata($data);
有关详细信息,请访问https://www.codeigniter.com/userguide3/libraries/sessions.html
答案 1 :(得分:0)
您不需要更改ci_session
的结构,实际上您不应该更改表结构。使用CodeIgniter's documentation中的表格结构。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(128) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);
您添加到会话数据的任何内容都将存储在&#34;数据&#34;表的一栏。
会话数据已经是一个数组。通过将一组数据作为会话数据项,您只会让生活变得更加艰难。此测试控制器可以更轻松地访问任何给定的会话数据项。
public function session_test($value = '')
{
$newdata = array(
'username' => 'johndoe',
'user_id' => 3,
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
echo "User Name: ".$this->session->username."<br>";
echo "User ID: ".$this->session->user_id."<br>";
echo "Is logged in: ";
echo $this->session->logged_in ? 'Yes' : 'No';
}