Php 使用cookie登录CodeIgniter

Php 使用cookie登录CodeIgniter,php,codeigniter,cookies,Php,Codeigniter,Cookies,我试图用自己的cookie创建一个登录系统。关键是 每次用户登录并选中“记住我”按钮时,它都会生成一个新的32个字符的cookie,并将其保存在用户表中名为“记住我”的列中。 若用户关闭浏览器并返回,它会自动再次登录他/她,但我似乎无法让它工作 如果我现在关闭浏览器,再次打开并返回我的站点,cookie仍然存在。问题是,每次会话过期(出于测试目的,我将其设置为1分钟),它都会自动将我注销,并完全忽略cookie。我的方法或数据库查询是否有问题 提前谢谢 这是我的型号: public fu

我试图用自己的cookie创建一个登录系统。关键是 每次用户登录并选中“记住我”按钮时,它都会生成一个新的32个字符的cookie,并将其保存在用户表中名为“记住我”的列中。 若用户关闭浏览器并返回,它会自动再次登录他/她,但我似乎无法让它工作

如果我现在关闭浏览器,再次打开并返回我的站点,cookie仍然存在。问题是,每次会话过期(出于测试目的,我将其设置为1分钟),它都会自动将我注销,并完全忽略cookie。我的方法或数据库查询是否有问题

提前谢谢

这是我的型号:

    public function checkRememberMeToken($cookie)
    {   
        $where = array (
                'remember_me_token' => $cookie
            );

        $this->db->select('*')->from('users')->where($where);
        $query = $this->db->get();

        if($query->num_rows() == 1) {

            return true;
        }
    }
    public function loginWithCookie()
    {

        if($cookie = $this->input->cookie('sportietown')) {

            $user = $this->user_model->checkRememberMeToken($cookie);

            if($user === TRUE)
            {
                $this->session->set_userdata('user_id', $user['user_id']);
                $this->session->set_userdata('email', $user['email']);
                $this->session->set_userdata('name', $user['name']);
                $this->session->set_userdata('profilepic', $user['profilepic']);

                redirect(base_url().'dashboard');

            } else {

                $this->load->view('/template/header');
                $this->load->view('index');
                $this->load->view('/template/footer');

            }
        }
    }
这是我的控制器:

    public function checkRememberMeToken($cookie)
    {   
        $where = array (
                'remember_me_token' => $cookie
            );

        $this->db->select('*')->from('users')->where($where);
        $query = $this->db->get();

        if($query->num_rows() == 1) {

            return true;
        }
    }
    public function loginWithCookie()
    {

        if($cookie = $this->input->cookie('sportietown')) {

            $user = $this->user_model->checkRememberMeToken($cookie);

            if($user === TRUE)
            {
                $this->session->set_userdata('user_id', $user['user_id']);
                $this->session->set_userdata('email', $user['email']);
                $this->session->set_userdata('name', $user['name']);
                $this->session->set_userdata('profilepic', $user['profilepic']);

                redirect(base_url().'dashboard');

            } else {

                $this->load->view('/template/header');
                $this->load->view('index');
                $this->load->view('/template/footer');

            }
        }
    }

设置的cookie和会话时间一起工作。会话时间是指用户可以使其浏览器处于空闲状态或返回后仍能再次被识别的时间量

当用户转到新页面并读取cookie时-如果会话处于活动状态,会话时间将再次开始。如果您将其设置为仅1分钟,则除非他们快速单击,否则它将不起作用。CI中的默认值为2小时(7200秒),或将其设置为所需的值


在CI config/config.php中,从第235行开始的是所有会话配置。确保它们设置正确,并且确保cookie名称中没有下划线

因为您正在为用户autologin使用表,所以需要保存用户的useragent字符串。它有这种格式

Mozilla/5.0(iPhone;CPU iPhone OS 10_3,如Mac OS X)AppleWebKit/602.1.50(KHTML,如Gecko)CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1

每次用户使用同一设备访问时,都可以使用此项来识别用户,然后让他登录


该表应如下所示:
user\u id
useragent

,因此测试它的唯一机会是将会话时间设置回默认值(7200秒),选中“记住我”复选框登录,进入睡眠状态,第二天早上查看cookie是否正常工作,我是否自动重新登录?您可以为任何值设置会话时间。如果你需要5分钟进行测试,那么就这样做。有些人将会话时间设置为30天或更长,因为他们希望网站记住访问者。然而,这并不意味着网站会将他们视为“已登录”。例如,亚马逊会在很多天内认出你和你购物车里的东西,但你必须在付款和完成购买之前再次“登录”。