【问题标题】:How to store username and users_id in codeigniter 3.1 session database table如何在codeigniter 3.1会话数据库表中存储用户名和users_id
【发布时间】:2023-03-05 23:41:02
【问题描述】:

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

感谢所有建议。

【问题讨论】:

    标签: php mysql database codeigniter session


    【解决方案1】:
    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

    【讨论】:

      【解决方案2】:

      您不需要更改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`)
      );
      

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

      会话数据已经是一个数组。将一组数据作为会话数据项只会让生活变得更加艰难。此测试控制器可以更轻松地访问任何给定的会话数据项。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多