如何在CodeIgniter中使用会话表

如何在CodeIgniter中使用会话表,codeigniter,session-variables,sessionid,Codeigniter,Session Variables,Sessionid,我是新的代码点火器,想问一下如何使用数据库中会话表的会话。 我已经用这个结构创建了会话表 CREATE TABLE `sys_sessions` ( `session_id` VARCHAR(40) NOT NULL DEFAULT '0' COLLATE 'utf8_unicode_ci', `ip_address` VARCHAR(16) NOT NULL DEFAULT '0' COLLATE 'utf8_unicode_ci', `user_agent` VARC

我是新的代码点火器,想问一下如何使用数据库中会话表的会话。 我已经用这个结构创建了会话表

CREATE TABLE `sys_sessions` (
    `session_id` VARCHAR(40) NOT NULL DEFAULT '0' COLLATE 'utf8_unicode_ci',
    `ip_address` VARCHAR(16) NOT NULL DEFAULT '0' COLLATE 'utf8_unicode_ci',
    `user_agent` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci',
    `last_activity` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `user_data` TEXT NOT NULL COLLATE 'utf8_unicode_ci',
    PRIMARY KEY (`session_id`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB;
并使用两个控制器来测试所使用的会话。首先,我运行set_session_test()控制器

public function set_session_test()
{
   $this->load->library('session');
   $this->session->set_userdata('username', 'Jhon');
   $this->session->set_userdata('email', 'jhon@gmail.com');
   echo "<pre>"; print_r($this->session->all_userdata()); echo "</pre>";
}
然后我运行get_session_test()检查它的session值是否仍然存在

Array
(
    [session_id] => 1b10e3671728804a63266bb9295b7e5d
    [ip_address] => 127.0.0.1
    [user_agent] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
    [last_activity] => 1387619831
    [user_data] => 
)
不幸的是,我没有找到我存储的任何用户名和电子邮件会话。我检查表sys\u session,它创建了两行session\u id

  • 这是ci会话的常见行为吗
  • 那么,如何在CI表会话中使用set和get自定义字段呢
  • 为什么在我移动到另一个页面后,创建的自定义字段总是丢失
  • 当我运行这个->会话->sess_destroy()时,为什么不删除表会话中的任何会话

  • Thx提前..

    在CodIgniter中已经有存储会话的规定

    `user_agent` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci'
    
    创建数据库表后,可以在config.php文件中启用数据库选项,如下所示:

    `user_agent` VARCHAR(250) NOT NULL COLLATE 'utf8_unicode_ci'
    

    当数据库中的
    user\u agent
    字段太短时,会发生此行为:

    实际上,当您计算当前用户_代理中的字符数时,您的字符数超过了50个,因此CI在数据库中找不到与此用户_代理的任何会话,因为以前存储的会话被截断为50个字符

    试着扩大这个领域,它会解决你的问题:


    我认为
    $this->laod->library('session')删除。打开
    autoload.php
    添加此
    $autoload['libraries']=array('database','session')。您的控制器没有调用会话库。在
    get\u session\u测试中
    删除
    $this->session->userdata()
    两行。这是我的猜测…你可以试试。Thx brod,我会试试。。
    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['sess_use_database'] = TRUE;
    
    `user_agent` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci'
    
    `user_agent` VARCHAR(250) NOT NULL COLLATE 'utf8_unicode_ci'