Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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 - Fatal编程技术网

Php 如何处理登录身份验证和会话

Php 如何处理登录身份验证和会话,php,codeigniter,Php,Codeigniter,使用codeigniter开发我的最新项目。话虽如此,处理登录会话的“最佳”方式是什么?现在,我对照数据库检查用户名/密码。如果匹配,我设置了各种会话变量,其中一个是用户名。在我的整个站点中,我检查用户是否已登录。我还阅读了各种博客,人们实际上根据某种php会话ID检查会话 所以我想我的问题是,有哪些方法可以保证网站的安全?显然,我不会在cookie中保存任何内容,会话将保存在某种DB表中。您在这方面的思路肯定是正确的 根据数据库验证凭据 在会话数据中存储身份验证状态 检查用户是否在每次访问需

使用codeigniter开发我的最新项目。话虽如此,处理登录会话的“最佳”方式是什么?现在,我对照数据库检查用户名/密码。如果匹配,我设置了各种会话变量,其中一个是用户名。在我的整个站点中,我检查用户是否已登录。我还阅读了各种博客,人们实际上根据某种php会话ID检查会话


所以我想我的问题是,有哪些方法可以保证网站的安全?显然,我不会在cookie中保存任何内容,会话将保存在某种DB表中。

您在这方面的思路肯定是正确的

  • 根据数据库验证凭据
  • 在会话数据中存储身份验证状态
  • 检查用户是否在每次访问需要身份验证的页面时都经过身份验证
要使登录过程安全,请执行以下操作:

  • 不要将密码以明文形式存储在数据库中,而是存储它们的哈希值(使用salt的sha1()效果很好)
  • 清理来自用户的任何和所有输入(包括登录表单数据)
  • 不要将任何不希望被篡改的数据存储在cookie中
我个人并没有使用CodeIgniter,但我非常确定,像这样的成熟框架在默认情况下会内置处理问题的类


下面是一个有关CI中身份验证的快速教程

您肯定走对了方向

  • 根据数据库验证凭据
  • 在会话数据中存储身份验证状态
  • 检查用户是否在每次访问需要身份验证的页面时都经过身份验证
要使登录过程安全,请执行以下操作:

  • 不要将密码以明文形式存储在数据库中,而是存储它们的哈希值(使用salt的sha1()效果很好)
  • 清理来自用户的任何和所有输入(包括登录表单数据)
  • 不要将任何不希望被篡改的数据存储在cookie中
我个人并没有使用CodeIgniter,但我非常确定,像这样的成熟框架在默认情况下会内置处理问题的类


下面是一个关于CI身份验证的快速教程

无论您将什么保存到会话中,它都非常安全,因为它只保存在您的(希望不是共享的)主机服务器上。如果要使用cookie,请仅存储通过数据库链接到用户数据的令牌。我也很确定ci有一个基本的身份验证模块,如果不是的话,现在切换到kohana来获得一个好的身份验证模块和ORM goods也不晚。

无论您将什么保存到会话中,它都非常安全,因为它只保存在您的(希望不是共享的)主机服务器上。如果要使用cookie,请仅存储通过数据库链接到用户数据的令牌。我还非常确定ci有一个基本的身份验证模块,如果不是的话,现在就切换到kohana来获得一个好的身份验证模块和ORM goodness吧。

CodeIgniter不使用本机PHP会话。它生成自己的会话数据。您需要通过调用
$this->load->library('session')来加载库“session”

我所做的是在用户使用Encryption类注册时加密密码。这是通过调用
$This->load->library('encrypt')来完成的
然后
$this->encrypt->encode(“用户密码”)
。您需要在
config.php
文件中指定加密密钥:$config['encryption\u key']=“your key”

然后,为了验证凭据,我从数据库中获取加密密码,并调用
$this->encrypt->decode(“user\u password”)
,检查它是否与用户编写的密码匹配

验证凭据后,我将要从用户那里存储的信息保存到CodeIgniter会话中。通过使用所需参数设置数组,然后调用
$This->session->set\u userdata($newdata)

示例(复制自):

然后,要检查用户是否已登录,您只需通过调用以下命令在每个方法中测试用户是否已登录:
$this->session->userdata('logged_in')

要注销用户,只需销毁会话:
$this->session->sess_destroy()

根据我的经验,框架为您提供了一些功能:

  • 它会在一定时间的不活动后销毁会话
  • CodeIgniter从表单中清除输入数据。例如,如果您试图输入“(”或“””或任何其他可能破坏或创建不需要的SQL语句的字符,CodeIgniter将从您这里转义它们
  • 它摇摆不定,非常灵活而且完整
  • 它基本上包含了你需要知道的一切,并给出了如何做到这一点的例子

  • CodeIgniter不使用本机PHP会话。它生成自己的会话数据。您需要通过调用
    $this->load->library('session');
    来加载库“session”

    我所做的是在用户使用加密类注册时加密密码。这是通过调用
    $This->load->library('encrypt');
    然后
    $This->encrypt->encode(“user\u password”)
    来完成的。您需要在
    config.php
    文件中写入加密密钥:$config['Encryption\u key']=“你的钥匙”

    然后,为了验证凭据,我从数据库中获取加密密码,并调用
    $this->encrypt->decode(“user\u password”)
    ,检查它是否与用户编写的密码匹配

    验证凭据后,我将要从用户那里存储的信息保存到CodeIgniter的会话中。这是通过使用所需参数设置数组,然后调用
    $This->session->set_userdata($newdata);
    来完成的

    示例(复制自):

    然后,要检查用户是否登录,您只需在每个方法中测试用户是否登录
    $newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );
    
    $this->session->set_userdata($newdata);