首页 文章

限制特定用户代理的表中的Codeigniter会话创建

提问于
浏览
0

在发布问题之前我尝试了很多 . 我无法找到解决问题的方法 . 请帮助任何人 . 我正在通过codeigniter开发应用程序 . 具有用户登录页面的应用程序,当用户登录用户详细信息会话时将创建并存储到会话表中 .

$data = array(
                'username' => $this->input->post('user_name'),
                'is_logged_in' => true
            );
            $this->session->set_userdata($data);

当我使用上面的代码时,codeigniter会自动插入到我的会话表(dt_usersession)中 .

如果有人尝试使用相同的用户名和密码登录,我可以像其他已登录相同的详细信息一样通知他们 . 如果他/她想要登录,我会要求他们输入他们的安全密钥以关闭他们在桌面上的前一个会话,我将允许登录当前用户 . 我将从ajax检查当前会话是否存活,如果不是页面将终止并重定向到登录页面 . 这将完全适用于我的Web应用程序 .

而且当我从android新会话中频繁创建我的codeigniter控制器时,我也有android应用程序(对于每个调用新会话在表中创建) . 因此,当我检查每分钟是否有其他人使用相同的用户名和密码登录时,我的会话表不断创建新行 . 所以我的服务器负载增加了 . 因为更多的用户使用我的应用程序,因此为每个用户请求多次创建新记录 . 如何解决这个问题,请帮助任何人

1 回答

  • 0

    您可以在/ application / libraries文件夹中创建 MY_Session 类,并根据条件覆盖默认配置文件,如下所示:

    class MY_Session extends CI_Session {
    
        public function __construct() {
           if(User::isLoggedIn()) 
           {
                $params = array(
                    "sess_use_database" => true,
                    "sess_table_name" => "CI_Session" // ... all other settings you may need
                );
           }
           else 
           { 
               $params = array(); 
           }
    
           // initialize parent session with correct params
           parent::__construct($params);
        }
    
    }
    

    或者,您可能希望为会话创建自己的表(在CI边界之外),只需存储登录用户的ID,会话ID( session_id() see manual)和时间戳,并在单独离开CI会话时再次检查该表 .

相关问题