记住我登录Codeigniter

Mr.*_* ED 2 codeigniter

当用户登录我的用户时,我正试图记住我的工作.我一直在努力了解使用数据库和登录控制器设置记住我的最佳方法.

使用我的控制器在登录视图表单上实现记住我的最佳做法是什么?

例子也很有用.

登录控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Login extends MX_Controller {

        private $error = array();

        public function __construct() {
            parent::__construct();
        }

        public function index() {

            $this->load->model('admin/user/user');

            $this->document->setTitle('Administration');

            if (($this->input->server('REQUEST_METHOD') == 'POST') && $this->validate()) {
                redirect('admin/common/dashboard');
            }

            if (isset($this->error['warning'])) {
                $data['error_warning'] = $this->error['warning'];
            } else {
                $data['error_warning'] = '';
            }

            $username = $this->input->post('username');
            $password = $this->input->post('password');
            $remember = $this->input->post('remember');

            if (isset($username)) {
                $data['username'] = $username;
            } else {
                $data['username'] = '';
            }

            if (isset($password)) {
                $data['password'] = $password;
            } else {
                $data['password'] = '';
            }

            if (isset($remember)) {
                $data['remember'] = $remember;
            } else {
                $data['remember'] = '';
            }

            $data['header'] = Modules::run('admin/common/header/index');
            $data['footer'] = Modules::run('admin/common/footer/index');

            return $this->load->view('template/common/login', $data);
        }

        public function validate() {
            $username = $this->input->post('username');
            $password = $this->input->post('password');

            if (!isset($username) || !isset($password) || !$this->user->login($username, $password)) {
                $this->error['warning'] = 'The login information is incorrect!';
            }
            return !$this->error;
        }
    }
Run Code Online (Sandbox Code Playgroud)

登录视图

<?php echo form_open('admin'); ?>

<br>
<div class="form-group input-group">
    <span class="input-group-addon"><i class="fa fa-tag"></i></span>
    <input name="username" class="form-control" type="text" placeholder="Your Username">
</div>

<div class="form-group input-group">
    <span class="input-group-addon"><i class="fa fa-lock"></i></span>
    <input name="password" class="form-control" type="password" placeholder="Your Password">
</div>

<div class="form-group">
    <label class="checkbox-inline">
    <input type="checkbox" name="remember">Remember me</label>
    <span class="pull-right"><a href="#">Forget password ? </a></span>
</div>
<button type="submit" class="btn btn-primary">Login Now</button>
<hr>
Not register?
<a href="">click here </a>

<?php echo form_close();?>
Run Code Online (Sandbox Code Playgroud)

Phi*_*lip 12

我建议您不要提供这样的功能,除非您愿意重新构建代码库以实现功能(安全).

Cookie 不是持久登录的安全方法.

您需要将cookie传递给用户名/电子邮件等标识符,后者应用于隐私原因.出于隐私原因,您还需要提供哈希/令牌而不是密码.

每次成功"记住我"登录后,您需要重新生成一个令牌并重新生成一个新cookie.

现在是棘手的部分.如果您通过remember me方法登录用户,则需要限制他/她的访问权限,即:不要让他们访问敏感数据,更改密码,更新银行帐户详细信息,进行购买

只有当他们登录为您提供有效的用户名/密码组合时,他们才能再次拥有完全访问权限.

要遵循的一些步骤

  1. 如果用户点击了我,请生成令牌并将其存储在DB中.
  2. 使用用户名设置cookie,也可以加密 - >将其与令牌一起编码.
  3. 采取通常的登录步骤.
  4. 下次用户点击登录URL时,请检查cookie
  5. 加密 - >从cookie中解码用户名/令牌,并根据数据库中的内容进行验证.
  6. 绕过登录并为用户设置会话数据
  7. 限制访问个人资料
  8. 重新生成新令牌,存储它并重新生成新的cookie详细信息

我知道这不是你要找的答案,但它可能会给你一些看法.