繁体   English   中英

如何在Codeigniter 3.1会话数据库表中存储用户名和users_id

[英]How to store username and users_id in codeigniter 3.1 session database table

我正在使用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存储到数据库中。

如何将会话中的用户名和user_id存储到数据库表中。

感谢您的所有建议。

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

该表将存储您的会话数据。 现在我们需要设置配置变量。 转到“ 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

实际上,您不需要更改ci_session的结构,则ci_session更改表结构。 使用CodeIgniter文档中的表结构。

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

您添加到会话数据中的所有内容都将存储在表格的“数据”列中。

会话数据已经是一个数组。 您只能通过将数据数组作为会话数据项来增加生活的难度。 该测试控制器可以更轻松地访问任何给定的会话数据项。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM