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

时间:2014-07-25 11:42:02

标签: php android mysql codeigniter

在发布问题之前,我尝试了很多。我无法找到问题的解决方案。请帮助任何人。 我是由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 :(得分: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会话时再次检查该表。