为什么建议将CodeIgniter会话存储在数据库表中?我知道这是关于安全的但是如何?
为什么在使用Session类时需要在配置中设置加密密钥? 你应该解密会话吗?
$this->session->sess_destroy();
会删除整个Cookie还是只删除您在Cookie中放入的数据?它是否完全结束了会话,我的意思是撤消
$this->load->library('session')
?
答案 0 :(得分:3)
CI的会议实际上是cookie。加密,但仍然是cookie。这就是为什么更喜欢在数据库中存储会话,因为你(应该)处理攻击中较不可达的目标,特别是如果你使用Active Records,它会自动逃避你的查询(这样就可以避免SQL注入)。 此外,与cookie相反,DB没有可用的有限内存量,因此您可以存储任何数量的数据,缓存操作,并将它们隐藏在前端。
我不确定为什么需要它,除了一些会话数据由CI自动加密的事实。因此,即使您没有使用加密库,一些加密仍然是一个加密(例如,保存会话ID)。正如Kai Qing正确指出的那样,您不必对已经由CI处理过的数据进行任何解密。
$this->session->sess_destroy()
只删除存储为会话的数据。同时也是cookie,为了删除整个内容,您需要使用专用功能(例如,查看cookie帮助程序)。但请记住,当您调用此函数时,您还会删除Flash消息(因为它们是会话),因此如果您只想取消设置某些元素,请使用unset_userdata($item)
。
它也不会结束库加载。对于任何其他库,类或控制器或其他任何东西,在每个请求之后,所有内容都从零重新加载。每次你发出请求时,脚本都会运行,重新初始化所有内容,当脚本结束时,所有内容都会像雨中的泪水一样丢失。这是php脚本的常规生命周期。如果在调用session-> sess_destroy()之后脚本未被绑定,则会加载会话库,但数据将被删除。
答案 1 :(得分:2)
回答您的第一个问题 - 建议通过DB存储以最小化会话中的数据并降低愚蠢的风险 - 就像帮助者一样。由于DB存储的会话只会将id存储在cookie中,因此可用信息将减少为无法使用的信息。
您无需解密任何内容。引擎会为您处理。
至于毁灭 - 我完全不知道。但我想一个简单的var_dump会回答这个问题。