代码之家  ›  专栏  ›  技术社区  ›  suresh

如果用户符合codeigner中数据库的到期时间,则从网站注销用户。

  •  0
  • suresh  · 技术社区  · 7 年前

    如果用户符合我在数据库中存储的到期时间,我将尝试从网站注销。 我已经创建了一个名为 用户会话 我储存电流的地方 用户ID ,请 逻辑时间(varchar) ,请 到期时间(varchar) 我在到期时间字段中添加了一分钟的额外登录时间,所以当用户登录时,这些值都将存储在db中。

    所以在用户登录后,他们将重定向到仪表板,这样如果用户在一分钟内不在网站上做任何事情,并且如果他们试图访问下一页,他们应该从网站注销。

    如果用户继续移动到下一页,我需要在每次移动到下一页时在登录时间字段中再增加一分钟的额外时间。

    我像这样储存在数据库里

    这是我的模型:

      public function sessionStore($data)
    {
        $this->db->select('*');
        $this->db->from('users');
        $this->db->where('username', $data['username']);
        $this->db->limit(1);
        $query = $this->db->get();
        if ($query->num_rows() == 1) {
            $result = $query->result_array();
            $recordId = $result[0]['id'];
            $status = $result[0]['status'];
            $sessionID = random_string('alnum',16);
            $currentpass = $result[0]['password'];
            if ($status != 1) {
                return 4;
            }
            $checktrue = password_verify($data['password'], $currentpass);
           // $checktrue = true;
            if ($checktrue) {
                $data_log = array(
                    'userid' => $recordId,
                    'sessionid' => $sessionID,
                    'logintime' => time(),
                    'expirytime' => time()+(60*1)
                 );
                $this->db->insert('user_sessions', $data_log);
                return 1;
            } 
        } 
    } 
    

    这是我的控制器:

     public function login_user() {
        $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean', 'required');
        if ($this->form_validation->run() == FALSE) {
            $this->load->view('login_view');
        } else {
            $data = array(
                'username' => $this->input->post('username'),
                'password' => $this->input->post('password')
            );
            $result = $this->Login_model->login($data);
            $res = $this->Login_model->sessionStore($data);
    
            if ($result == 1) {
                $userData = $this->Login_model->getUserData($data);
                $sessionArray = array(
                    'is_logged' => TRUE,
                    'user_name' => $data['username'],
                    'first_name' => $userData['firstname'],
                    'last_name' => $userData['lastname'],
                    'userlevel' => $userData['userlevel'],
                    'organisation_id' => $userData['organisation_id'],
                    'user_id' => $userData['id'],
                    'lastip' => $userData['lastip']
    
                );
                $this->session->set_userdata($sessionArray);
                redirect('dashboard');
            } else if ($result == 2) {
                $this->session->set_flashdata('message', 'Password seems to be wrong!');
                $this->load->view('login_view', $data);
            } else if ($result == 4) {
                $this->session->set_flashdata('message', 'Username is not active!');
                $this->load->view('login_view', $data);
            }else {
                $this->session->set_flashdata('message', 'Username not found!');
                $this->load->view('login_view', $data);
            }
        }
    }
    

    有人能帮我怎么做吗?

    事先谢谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Evince Development    7 年前

    \application\models\Common_model.php

    \application\config\autoload.php

    $autoload['model'] = array('common_model');
    

    <?php
    class Common_model extends CI_Model {
        function __construct()
        {
            parent::__construct();
            $this->checkUserActivity();
        }
        public function checkUserActivity(){
            $this->db->where('expirytime >=',time());        
            $this->db->where('userid',$this->session->userdata('user_id'));
            $result = $this->db->get('user_sessions')->first_row(); 
            /* Check If user active within 1 minute then add 1 minute more*/
            if($result){ // Update
                $data_log = array(                
                    'expirytime' => time()+(60*1)
                 );
                $this->db->where('userid',$this->session->userdata('user_id'));
                $this->db->update('user_sessions', $data_log);
            } else {//Logout
                $this->activityLogout();
            }
            //echo $this->db->last_query(); exit;
        }
    
        public function activityLogout()
        {
            $this->session->unset_userdata('user_id'); // single unset
            $this->session->sess_destroy(); // Unset all your
            redirect('home', 'refresh');
        }
    }
    ?>
    

    推荐文章