Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Php 如何在每个页面上验证用户会话_Php_Codeigniter_Session_Login - Fatal编程技术网

Php 如何在每个页面上验证用户会话

Php 如何在每个页面上验证用户会话,php,codeigniter,session,login,Php,Codeigniter,Session,Login,我在Codeigniter中处理这个项目,我创建了登录和注册脚本,但我不知道如何在每个页面上验证用户。 当用户登录会话中要存储的数据(Ci会话用户_数据)时,我可以将其与每个页面上的数据库进行比较,以确定会话是否有效? 我使用codeigniter的会话类,并将值自动存储在数据库中。请帮帮我,我被困在这里 我的会话是这样处理的: 1。当任何用户访问我的网页时,他将获得唯一的哈希(md5)会话id,该id在加载页面时进行检查。如果它存在,如果它不生成新的,则什么也不做。每5分钟更改一次。 2.当用

我在Codeigniter中处理这个项目,我创建了登录和注册脚本,但我不知道如何在每个页面上验证用户。 当用户登录会话中要存储的数据(Ci会话用户_数据)时,我可以将其与每个页面上的数据库进行比较,以确定会话是否有效? 我使用codeigniter的会话类,并将值自动存储在数据库中。请帮帮我,我被困在这里

我的会话是这样处理的:
1。当任何用户访问我的网页时,他将获得唯一的哈希(md5)会话id,该id在加载页面时进行检查。如果它存在,如果它不生成新的,则什么也不做。每5分钟更改一次。
2.当用户登录要传递到的数据时,我可以稍后将其与数据库进行比较(在每次页面加载时)


我不知道只存储'is_logged'=1个cookie是否安全。我想检查每个服务器请求上的cookie。

会话存储在服务器上,因此不需要验证。您只需要验证您在会话中输入的内容

会话由提供会话id cookie的用户进行身份验证(
PHPSESSID


另一方面,Cookie确实需要验证,但Cookie不应用于存储关键数据,因此这有点毫无意义。

成功登录后,您将创建一个

$this->session->set_userdata(array('authorized' => true));
然后,您可以创建一个auth库或一个模型方法,只要适合您,它只检查会话数据是否存在

function is_logged()
{
  return (bool)$this->session->userdata('authorized');
}
如果为FALSE,则不记录用户,如果为TRUE,则不记录用户。您可以在每个控制器的方法上调用此函数,您需要将其置于身份验证之后,或者在Controlr的构造函数中调用此函数,如果您需要用于所有方法(例如管理面板)

例如,看看CI中的主流身份验证库之一Ion Auth是如何处理这件事的(使用logged_in()方法,该方法与我的示例代码中的方法相同。请记住,会话是加密的,如果存储在数据库中,则安全性更高);

您应该在类似会话的帮助程序中编写函数,并在类的构造函数中调用此帮助程序方法。如果您的用户正确登录,则它将继续,否则它将重定向到登录页面。您的帮助程序应该是这样的

   function session_set()
   {
$ch=&get_instance();
if($ch->session->userdata('your_session_id')=='')
{
    redirect('your_login_page');

}   
在控制器中,您应该这样检查(构造函数)


希望这对您有用

CI的会话是加密cookie,而不是本机php$\u会话数组,OP说他正在使用CI的会话库是的。。他编辑了他的问题。我的答案适用于PHP的本机会话处理。理论上,如果本地用户修改其cookie并将“authorized”设置为true,即使他没有登录,他也可以登录吗?本地cookies也可以修改吗?cookies是加密的,操作应该不那么容易。此外,您将会话存储在数据库中,因此不涉及cookies,所以假设我有一个auth()方法作为_构造类,在调用任何其他方法之前检查会话。如果用户已登录(authorize=1),我是否应该检查数据库以确定是否存在cookie?你能把你的第二句解释得更清楚些吗。谢谢,好的,总结一下:1。在会话表中,我有用户的cookies。2.当用户打开一个页面时,我根据会话表3中的cookies检查他的cookies。如果会话\u id是匹配的,并且他登录了\u=1(在cookies和表中),那么他是否正常?如果您设置使用数据库,则使用正常的方法调用,CI将自动检查数据库,无需手动查询。基本上,是的,工作流程就是这样的。如果您需要更多的方法或灵感来源,请查看经过长期测试的代码:例如,Ion Auth或Tank Auth,这是CI授权库中使用最多的两个(我现在提供的统计数据)。您可以看到他们是如何处理这项工作的,就像我指出的那样。请注意,在每次页面加载时查询数据库是对性能的重大影响。根据你的需要,这可能是合理的,但这是值得考虑的。
   session_set();