CodeIgniter,使用 Redis 作为会话管理器

Posted

技术标签:

【中文标题】CodeIgniter,使用 Redis 作为会话管理器【英文标题】:CodeIgniter, Using Redis as session manager 【发布时间】:2013-06-06 00:58:10 【问题描述】:

来自github的配置声明我需要设置

$config['sess_use_database'] = TRUE;

这是在redis中存储会话数据所必需的。

但是,来自CodeIgniter's guide如果$config['sess_use_database'] = TRUE;会话类将会话数据存储在DB中。

我想了解,即使我们将 'sess_use_database' 配置设置为 true,如何绕过数据库写入。

其次,该方法需要安装phpredis扩展。

我已经从以下github repository 安装了另一个 CI redis 库。

有人可以帮我配置来自 ericterpstra 的代码,[文件名:ci_sock/part_two/MY_Session.php] 以便它可以使用上面的库,而不是 phpredis?

【问题讨论】:

【参考方案1】: Codeigniter 版本 3 支持

Redis 会话

编辑配置文件

$config['sess_driver'] = 'redis'; //enable redis session
$config['sess_save_path'] = 'tcp://localhost:6379'; // redis hostname:port 

Official Documentation Redis Driver

【讨论】:

【参考方案2】:

如果我没记错的话,phpredis 是 PHP 的 C 扩展,其中 CI redis 库是 redis 客户端的纯 PHP 实现。您可能有可能将 phpredis 作为扩展安装并仍然使用您的 CI redis 库(尽管您可能想转储它,因为它不再维护)。

如果您安装了phpredis,您只需将php.ini 文件中的默认会话处理程序切换为使用redis,即可绕过整个CodeIgnitor 会话配置问题。

这是来自https://github.com/phpredis/phpredis#php-session-handler的示例:

session.save_handler = redis
session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2"

这将透明地使用您的 redis 存储来存储会话。

【讨论】:

以上是关于CodeIgniter,使用 Redis 作为会话管理器的主要内容,如果未能解决你的问题,请参考以下文章

在 Codeigniter 中重定向后会话丢失

codeigniter 无法访问另一个控制器中的会话数据

会话数据问题编号的值没有增加并在 codeigniter 项目中传递

使用 Redis 与 memcached+db 作为 Django 会话系统的优缺点?

Facebook SDK + CodeIgniter 会话

我应该在 CodeIgniter 中使用哪个会话库?