Session 在CodeIgniter中将Isset与本机会话一起使用
我读过关于CI处理会话与本机会话不同的内容,并且对将所有数据存储在cookie(?)中感到有点不安全,而PHP的本机会话只存储会话ID(?)。因此,我决定在不使用CI native_会话库的情况下使用本机会话 现在,我知道CI中的输入类使用如下的true/false语句验证Isset:Session 在CodeIgniter中将Isset与本机会话一起使用,session,codeigniter,isset,Session,Codeigniter,Isset,我读过关于CI处理会话与本机会话不同的内容,并且对将所有数据存储在cookie(?)中感到有点不安全,而PHP的本机会话只存储会话ID(?)。因此,我决定在不使用CI native_会话库的情况下使用本机会话 现在,我知道CI中的输入类使用如下的true/false语句验证Isset: if ($this->input->post('something')) 这使得Isset函数无法工作(它给出了一个错误)。但是,我想用Isset函数检查我的本机会话,那么我该怎么做呢?我试过了 i
if ($this->input->post('something'))
这使得Isset函数无法工作(它给出了一个错误)。但是,我想用Isset函数检查我的本机会话,那么我该怎么做呢?我试过了
if(isset($\u会话['keyHere']))
这给了我一个错误
总而言之:我想在会话数组中使用Isset,就像我感觉使用Isset一样
if($\u会话['keyHere'])
没有Isset可能是“危险/愚蠢的”
另外,作为最后一个问题,我很好奇您认为哪个会话处理最安全?CI的会话类或PHP对服务器端存储的本机处理等。?我非常希望在会话中尽可能安全,不管这是否意味着我必须编写更长的代码。我会使用
array\u key\u exists
而不是isset
isset
还检查该值是否为null,因此具有现有键但值为null的数组仍将返回false。你知道这是一个数组,你想检查一个键是否存在,所以最好使用array\u key\u exists
但这不是问题所在D
我想您需要先调用session\u start()
只要您在单个Web服务器上,PHP的本机会话处理就可以正常运行 我一直使用empty()代码>尽管如果您不知道自己在做什么,它的工作方式会有所不同
- 如果是空数组,它将
返回错误
- 如果为NULL,则返回FALSE
我个人对CI 2.0.2中的新版本没有什么问题。创建一个名为“sessions”的表并将会话存储在数据库中,使用sess\u use\u database
设置为true。还将sess\u encrypt\u cookies
设置为true,最后,如果希望会话与用户ip匹配,请使用sess\u match\u ip
。哦,一定要设置加密密钥,这会使它更加安全
PHP会话很不错,但我个人更喜欢CI会话,因为它提供了更多的灵活性。尤其是当您使用负载平衡器运行多个web头时
希望有帮助 为什么不使用内置的?在不强制您使用isset()
方面,它将提供与输入类相同的功能
它允许加密会话,并使用自己的会话实现
$this->session->userdata("keyHere"); // returns false if not set
好的,让我们来谈谈你在isset上遇到的问题!
我同意后面的所有答案,空函数是一个很好的尝试,使用array_key_也存在,但是我在php语言中有自己的位置
起初,您没有将收到的错误发布到日志中,但是@GolezTrol说您可能在会话_start()中遇到问题
您需要将它放在页面顶部,在任何脚本之前。我会把这段代码放在所有脚本之前,最好放在config/config.php页面的开头,或者放在root index.php上
使用它,您将在系统的所有页面上启动会话。
关于你的第二个问题
我认为PHP的本地会话非常安全,但是Codeigniter的会话也非常好
Codeigniter在安全方面有一些问题,当我们谈论cookie时,如果我们处理系统的重要数据,使用它很困难,特别是如果其他人可以编辑它,考虑到我上面描述的所有内容,我可以说Codeigniter有一个很好的seession库,即使我们正在处理重要数据
如果您不相信cookie的安全性,只需打开数据库,您就会遇到任何问题。好的是它的能力和设施,以与这个类在系统的每个地方
实际上,我使用的是数据库方式,我建议使用。您真的应该使用codeigniter会话类。您可以让它将会话数据存储在数据库中,以便cookie只保存一个唯一的标识符。您还可以将cookie设置为使用codeigniter安全密钥加密
然后,当您访问会话信息时,它的行为与正常的输入方法类似,因此您只需执行if($this->session->userdata('name'))即可,而不用使用isset或empty或其他任何方法
$data=$this->session->userdata("session variable");
if($data)
{
// do something
}
在CI代码文件中使用此选项。它一直对我有用
$logindata = $this->session->userdata('username');
if ($logindata !== FALSE)
{
//it exists
}
也许会有帮助