2011-11-09 95 views
1

为什么建议将CodeIgniter会话存储在数据库表中?我知道这是关于安全,但是如何?CodeIgniter会话

为什么在使用Session类时需要在配置中设置加密密钥? 你应该解密会话吗?

$this->session->sess_destroy();请删除整个cookie还是只删除cookie中的数据?并且它是否完全结束了会话,我的意思是撤消 $this->load->library('session')

回答

3

CI的会话实际上是cookies。加密,但饼干仍然。这就是为什么最好将会话存储在数据库中,因为你(应该是)处理一个难以达到的攻击目标,特别是如果你使用活动记录,这会自动转义你的查询(以避免SQL注入)。 此外,与cookies相反,DB不具备可用内存量有限的情况,因此您可以在其中存储任意数量的数据,缓存操作并将其从前端隐藏。

我不确定为什么它需要,除了某些会话数据是由CI加密的自动。因此,即使您不使用加密库,仍然有一些加密(例如,保存会话ID)。正如凯庆正确指出的那样,您不必对CI已经处理的数据进行任何解密。

$this->session->sess_destroy()只是删除存储为会话的数据。虽然也是cookie,但为了删除整个内容,您需要使用专用功能(例如,查看cookie助手)。但请记住,当您调用此函数时,还会删除Flash消息(因为它们是会话),所以如果您只想取消设置某些元素,请使用unset_userdata($item)

它也没有结束库加载。至于任何其他库,类或控制器等,在每次请求后,所有内容都从零开始重新加载。每当您提出请求时,脚本都会运行,重新初始化所有内容,脚本结束后,所有内容都会在雨中流失。这是一个PHP脚本的正常使用寿命。如果脚本在调用session-> sess_destroy()之后没有结束绑定,会话库仍将被加载,但数据将被删除。

2

要回答你的第一个问题 - 建议通过数据库存储,以最小化会话中发现的数据,并降低愚蠢的风险 - 像帮手。由于DB存储的会话只会将该ID存储在cookie中,因此可用信息会减少为不可用的信息。

你不需要解密任何东西。引擎为你处理。

至于摧毁 - 我不知道确切。但我想一个简单的var_dump会回答这个问题。