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

时间:2010-01-25 21:19:28

标签: php codeigniter

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

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

3 个答案:

答案 0 :(得分:4)

你肯定是在正确的轨道上。

  • 针对数据库验证凭据
  • 在会话数据中存储身份验证状态
  • 检查用户是否在每次访问需要身份验证的页面时都经过身份验证

使您的登录过程安全:

  • 不要以明文形式将密码存储在数据库中,存储它们的哈希值(带盐的sha1()效果很好)
  • 清理来自用户的所有输入(包括登录表单数据)
  • 不要存储任何不想被篡改的数据

我没有亲自使用过CodeIgniter,但我很确定像这样的成熟框架会有一些类来处理默认情况下内置的问题。

以下是CI link

中的身份验证快速教程

答案 1 :(得分:0)

无论你保存到会话中它都非常安全,因为它只保存在你的(希望不是共享的)主机服务器上。如果您想使用cookie,请仅存储通过数据库链接到用户数据的令牌。我也很确定ci有一个基本的auth模块,如果不是为了一个好的auth模块和ORM善良而不能迟到kohana。

答案 2 :(得分:0)

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

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

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

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

示例(从http://codeigniter.com/user_guide/libraries/sessions.html复制):

$newdata = array(
               'username'  => 'johndoe',
               'email'     => 'johndoe@some-site.com',
               'logged_in' => TRUE
           );

$this->session->set_userdata($newdata);

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

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

根据我的经验,框架为您做了一些事情:

  1. 在一段时间不活动后会破坏会话。
  2. CodeIgniter清除表单中的输入数据。例如,如果您尝试输入“(”或“'”或任何其他可能破坏或创建不需要的SQL语句的字符,CodeIgniter会将它们从您身上转义。
  3. 它摇滚。它非常灵活和完整。
  4. The user guide is your friend.它基本上包含了您需要知道的所有内容,并为您提供了如何操作的示例。
相关问题