【问题标题】:Why Codeigniter does not save my custom session on database?为什么 Codeigniter 不将我的自定义会话保存在数据库中?
【发布时间】:2014-10-01 19:48:26
【问题描述】:

我无法使用 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);

在我的控制器中,我尝试查看我的会话:

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 会话

拜托,我需要帮助....我不知道尝试更多...谢谢大家

【问题讨论】:

  • 代码看起来确实正确,但我首先要确保 $usario 正在设置。 var_dump($usario) 在尝试将其添加到会话之前。也许你的 foreach 没有正确填充它。
  • 是的,感谢您的回答。我检查了数组 $usuario 并包含预期的数据。登录控制器,我一直在停止应用程序的流程,并将会话保留在控制器中,但是当您离开该控制器时,无论是通过重定向(“/”,“刷新”)还是通过 URL 手动丢失会话。

标签: php database codeigniter codeigniter-2


【解决方案1】:

好吧,我仔细分析了我的应用程序的流程,我检测到错误来自从登录控制器到任何其他控制器的重定向。当时,正在失去sessiones codeigniter。

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

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

如果其他人遇到了同样的问题,或者对于留下文章中链接的未来开发人员,这是新库会话的代码。

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

【讨论】:

    【解决方案2】:

    变化:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-10
      • 2021-05-12
      • 1970-01-01
      • 2011-04-10
      • 2023-01-28
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多