Codeigniter应用程序bug:登录凭证被记住,即使记得我没有被检查

2022-01-30 14:56:02 标签 phpcodeignitercodeigniter-3

我正在使用CodeIgniter 3。1。8和Twitter Bootstrap 4开发一个在线报纸/博客应用程序。该课程应用程序有一个登录和注册系统。

我目前正在为登录表单添加一个“记住我”的功能。

在application\views\auth\login。php中我有:

<?php echo form_open(base_url('login/login')); ?>
  <div class="form-group <?php if(form_error('email')) echo 'has-error';?>">
    <input type="text" name="email" id="email" value="<?php if(isset($_COOKIE['userEmail'])) { echo $_COOKIE['userEmail']; } ?>" class="form-control" placeholder="Email">
    <?php if(form_error('email')) echo form_error('email'); ?> 
  </div>
  <div class="form-group <?php if(form_error('password')) echo 'has-error';?>">
    <input type="password" name="password" id="password" value="<?php if(isset($_COOKIE['userPassword'])) { echo $_COOKIE['userPassword']; } ?>" class="form-control" placeholder="Password"> 
    <?php if(form_error('password')) echo form_error('password'); ?> 
  </div>
  <div class="form-group remember-me">
    <input type="checkbox" name="remember_me" value="true" id="remember_me">
    <span class="text text-muted">Remember me</span>
  </div>
  <div class="form-group">
    <input type="submit" value="Login" class="btn btn-block btn-md btn-success">
  </div>
<?php echo form_close(); ?>

在控制器(application\controllers\Login。php)中,我有:

public function login() {  
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'required|trim');
    $this->form_validation->set_error_delimiters('<p class="error-message">', '</p>');
    if ($this->form_validation->run()) {
      $email = $this->input->post('email');
      $password = $this->input->post('password');
    
      $this->load->model('Usermodel');
      $current_user = $this->Usermodel->user_login($email, $password);
        // If we find a user
      if ($current_user) {
        // If the user found is active
        if ($current_user->active == 1) {
          $this->session->set_userdata(
           array(
            'user_id' => $current_user->id,
            'user_email' => $current_user->email,
            'user_avatar' => $current_user->avatar,
            'user_first_name' => $current_user->first_name,
            'user_is_admin' => $current_user->is_admin,
            'user_active' => $current_user->active,
            'is_logged_in' => TRUE
            )
           );
           // Remember me
           if (!empty($this->input->post('remember_me'))) {
            setcookie ('userEmail', $email, time() + (7 * 24 * 3600));  
            setcookie ('userPassword', $password,  time() + (7 * 24 * 3600));
           } else {
            setcookie ('userEmail', ''); 
            setcookie ('userPassword','');
          }
          
          // After login, display flash message
          $this->session->set_flashdata('user_signin', 'You have signed in');
          //and redirect to the posts page
          redirect('/dashboard');
        } else {
          // If the user found is NOT active
          $this->session->set_flashdata("login_failure_activation", "Your account has not been activated yet.");
          redirect('login'); 
        }
      } else {
        // If we do NOT find a user
        $this->session->set_flashdata("login_failure_incorrect", "Incorrect email or password.");
        redirect('login'); 
      }
    }
    else {
      $this->index();
    }
}

这个问题

因为一个原因,我已经无法发现,即使当记住我的记住_me复选框没有被选中,登录凭证仍然记得。

更新

我去应用\config\config。php替换$config['sess_expiration'] = 7200宽度:

$config['sess_expiration'] = 0;

因此记忆不再发生。

我错在哪里?

### #在你的认证检查脚本检查cookie过期时间,一旦过期,清除会话变量。

###你正在测试Chrome吗?我认为Chrome无论如何都会记住已登录的状态(在关闭并重新打开浏览器后,你仍在登录),而其他浏览器,如Firefox,在重新打开时会丢失cookie。

您也可以在这里进行测试:https://demo。fleio。com/

# # #

setcookie('userEmail', $email, 0, "/");
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码