为什么Codeigniter不会将我的自定义会话保存在数据库中?

时间:2014-10-01 19:48:26

标签: php database codeigniter codeigniter-2

我无法使用codeigniter将自定义会话保存在数据库中,我不知道为什么。

这是我的config.php

$config['encryption_key'] = 'MY_KEY';

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

在我的模型中我有这个:

foreach ($res as $user) {
    $usuario["name"] = $user->name;
    $usuario["lastname"] = $user->lastname;
    $usuario["date_birthday"] = $user->date_birthday;
    $usuario["date_register"] = $user->date_register;
    $usuario["last_season"] = $user->last_seasson;
    $usuario["email"] = $user->email;
    $usuario["contry"] = $user->contry;
    $usuario["sex"] = $user->sex;
    $usuario["role"] = $user->role;
    $usuario["status"] = $user->status;
    $usuario["idUsuario"] = $user->id;
}

$this->set_last_season($usuario["idUsuario"]);

$this->session->set_userdata('usuario', $usuario);

在我的Controller中,我尝试用以下方式查看我的会话:

var_dump($this->session->userdata('usuario'));

我在数据库中创建了会话表:

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

所有这些代码都可以正常运行而无需在数据库上保存会话并使用cookie会话

拜托,我需要帮助....我不知道多尝试...感谢所有人

2 个答案:

答案 0 :(得分:0)

我跟着详尽地分析了我的应用程序的流程,并且我发现了从登录控制器到任何其他控制器的重定向中出现的错误。那时,正在失去会议的codeigniter。

我正在记录这一失败,并看到有更多的人受到影响,并且不相信这个执政的余烬没有得到解决。因此,在Google彻底搜索之后,我发现了一篇有趣的文章描述了这个问题,并为codeigniter系统中包含的Sessions库文件提供了一个“补丁”。

我所做的这个库是重用原始库的所有方法,但将它应用于本机会话的使用。因此,控制器之间的会话通过并没有失败。

如果其他人遇到同样的问题,或者未来的开发人员在文章中留下了新库会话代码的链接,该怎么办。

http://www.philsbury.co.uk/blog/code-igniter-sessions

答案 1 :(得分:0)

变化:

DROP TABLE IF EXISTS `ci_sessions`;
CREATE TABLE `ci_sessions` (
  `session_id` varchar(40) NOT NULL DEFAULT '0',
  `ip_address` varchar(45) NOT NULL DEFAULT '0',
  `user_agent` varchar(120) NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text NOT NULL,
  PRIMARY KEY (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

有:

DROP TABLE IF EXISTS `ci_sessions`;
CREATE TABLE `ci_sessions` (
  `session_id` varchar(40) NOT NULL DEFAULT '0',
  `ip_address` varchar(45) NOT NULL DEFAULT '0',
  `user_agent` varchar(120) NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text NOT NULL,
  PRIMARY KEY (`session_id`),
  **KEY `last_activity_idx` (`last_activity`)**
) ENGINE=MyISAM DEFAULT CHARSET=utf8;