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

Php 我应该在CodeIgniter中使用哪个会话库?,php,arrays,session,codeigniter,Php,Arrays,Session,Codeigniter,我最近开始使用CI和它的CI会话,但我注意到,使用CI会话比使用基本PHP会话更耗时:数组 我有一个名为$\u SESSION['stats']的数据数组,无论登录/注销如何,它都会持续存在,然后我将数据以以下形式存储在该数组中: $\u会话['stats']['last\u page']=$\u服务器['REQUEST\u URI'] 当用户注销时,它将stats数组保存在一个变量中,清除会话,然后将其加载回新会话 问题是为了编辑最后一页键,而不是上面的一行,我必须使用以下代码: $stats

我最近开始使用CI和它的CI会话,但我注意到,使用CI会话比使用基本PHP会话更耗时:数组

我有一个名为
$\u SESSION['stats']
的数据数组,无论登录/注销如何,它都会持续存在,然后我将数据以以下形式存储在该数组中:

$\u会话['stats']['last\u page']=$\u服务器['REQUEST\u URI']

当用户注销时,它将stats数组保存在一个变量中,清除会话,然后将其加载回新会话

问题是为了编辑最后一页键,而不是上面的一行,我必须使用以下代码:

$stats = $this->CI->session->userdata('stats');
$stats['last_page'] = $_SERVER["REQUEST_URI"];
$this->CI->session->set_userdata('stats', $stats);
这是我在CI会话中发现的许多烦恼之一,它们使我对它作为会话处理程序感到不满意。所以我的问题是:我应该在CodeIgniter中使用哪个会话系统?。。。使用CI会话有什么原因吗?是否有您建议的CI库?为什么不直接使用PHP会话呢

谢谢


Lemiant

听起来你在用面包屑法

这可能会有所帮助


为了回答您的另一个问题,是的,使用CodeIgniter会话库有一个很好的理由。我之所以使用它,是因为我需要将用户会话数据存储在我的数据库中(更安全),而且该库具有加密cookies的功能,如果启用了全局XSS筛选,那么数据也将被清除。

CI会话提供了一些额外的功能例如,每隔给定的时间自动重新生成会话id(出于安全考虑)、IP地址跟踪和flashdata(读取一次后清除的会话数据)

CI的会话机制将所有数据存储在cookie中。PHP的本机会话机制存储在服务器端。每个都有它的优点/缺点。Cookie只能保存4KB的数据,因此如果您在会话PHP本机会话中存储大量数据可能会更好

如果您决定使用本机PHP会话,请使用:(CI 1.7.2)

Session Hybrid使用本机PHP会话,可以将会话数据存储在默认的CI db中,是CI会话类的替代品,只需要重写一个文件

[*如果使用1.7.0之前的CI版本,请尝试使用]


旁注:如果您选择继续使用CI的会话,为了增加安全性,您可以将会话存储在数据库中并加密cookie(请参阅)。

我对CI一无所知,但看起来您可以通过创建一个Stats类并存储该类的实例来解决这个问题。然后您可以使用
$this->CI->session->userdata('stats')->setLastPage($\u SERVER['REQUEST\u URI'])我知道这并不是你想要的,但这也有其他好处(比如去掉一些神奇的字符串并帮助编写文档)。为什么数据库更安全?2.我是否可以在页面开始时将一个变量从CI会话卸载到$\会话中,然后在页面结束时上载该变量?1。因为默认情况下,CI在cookie中存储未加密的会话变量,即用户计算机上的会话变量为纯文本。如果会话变量存储在数据库中,则它们不会存储在cookie中。@lemiant发生的情况是,存储在用户本地计算机上的唯一内容是一个只有您的站点才能使用的加密ID。这阻碍了大多数会话劫持的尝试。谢谢,提供信息。我决定迁移回PHP会话,因为它们更易于使用。(并允许手动sesseion_再生)