Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 在CodeIgniter中将Isset与本机会话一起使用_Session_Codeigniter_Isset - Fatal编程技术网

Session 在CodeIgniter中将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

我读过关于CI处理会话与本机会话不同的内容,并且对将所有数据存储在cookie(?)中感到有点不安全,而PHP的本机会话只存储会话ID(?)。因此,我决定在不使用CI native_会话库的情况下使用本机会话

现在,我知道CI中的输入类使用如下的true/false语句验证Isset:

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
}
也许会有帮助