php - Codeigniter 检查 index.php 文件中是否已登录

标签 php mysql codeigniter

我真的需要帮助,我两天前正在自己​​寻求解决方案,但没有结果。 我需要检查用户是否已登录:

$CI =& get_instance(); $loggedIn = $CI->session->userdata('loggedin') == TRUE

如果 $loggedIn 为 true,则表示用户已登录。我需要在索引文件中检查这一点,因为我从中选择数据库:

$parsed = parse_url($_SERVER['REQUEST_URI']);
$path = $parsed['path'];
$path_parts = explode('/', $path);
$db = $path_parts[4]; 


if(isset($db) && is_numeric($db)){
    define('DB', $db);
}

$db 是我的数据库的名称,所以如果我在登录页面中,就没有问题,因为它是在 url 中设置和数字的。但是当我登录时,我将这个 $db 存储在 session 变量中,所以我需要做这个测试:

if($this->session->userdata('loggedin') == TRUE){
    define('DB', $this->session->userdata('db'));
}

我的数据库文件:

   $active_group = 'default';
   $active_record = TRUE;
   $db['default']['hostname'] = 'localhost';
   $db['default']['username'] = '*********';
   $db['default']['password'] = '*********';
   $db['default']['database'] = DB;
   $db['default']['dbdriver'] = 'mysql';
   $db['default']['dbprefix'] = '';
   $db['default']['pconnect'] = FALSE;
   $db['default']['db_debug'] = TRUE;
   $db['default']['cache_on'] = FALSE;
   $db['default']['cachedir'] = '';
   $db['default']['char_set'] = 'utf8';
   $db['default']['dbcollat'] = 'utf8_general_ci';
   $db['default']['swap_pre'] = '';
   $db['default']['autoinit'] = TRUE;
   $db['default']['stricton'] = TRUE;

最重要的问题是我需要通过网址使用不同的数据库。例如,如果用户输入此链接:/user/login/34,他将使用名为 34 的数据库。

我正在使用 codeigniter php 框架 core/MY_Controller.php代码

class MY_Controller extends CI_Controller
{
    public $data = array();
    function __construct ()
    {
        parent::__construct();

        $this->data['errors'] = array();
        $this->data['app_name'] = config_item('app_name');
        $this->load->helper('form');
        $this->load->library('form_validation');
        $this->load->model('user_m');

        $db_prefix = 'autojahi_dev';
        $config = array(
           'hostname' => 'localhost',
           'username' => '****',
           'password' => '****',
           'database' => '****',
           'dbdriver' => 'mysql',
           'dbprefix' => '',
           'pconnect' => FALSE,
           'db_debug' => TRUE,
           'cache_on' => FALSE,
           'cachedir' => 'cache',
           'char_set' => 'utf8',
           'dbcollat' => 'utf8_general_ci',
           'swap_pre' => '',
           'autoinit' => TRUE,
           'stricton' => TRUE
        );

        if($this->uri->segment(4)){
               $config['database'] = $this->uri->segment(4);
        }          

      $this->load->database($config);
      //$this->db->reconnect();//shouldnt be required but try it if there is problem
      echo $this->db->database;//for testing 


        $current_link = uri_string();

        // Algorithm of autojahiz access autorization

        $allow_not_loggedin = array('login', 'logout', 'reset_pass', 'send_reset_pass_email', 'reset_pass_form', 'update_pass', 'views', 'invalid_link' );

        switch (strtolower( $this->router->class ) )
        {
            case 'user':
                $allow_loggedin = array('denied', 'index', 'edit', 'logout');
            break;

            case 'dashboard':
                $allow_loggedin = array('denied', 'index');
            break;
        }

        if ( $this->session->userdata('loggedin') == FALSE ) 
        {   
            if (!in_array( $this->router->method, $allow_not_loggedin) )
            {
                redirect( 'user/login' );
            }
        }
        else
        {   
            if (!in_array( $this->router->method, $allow_loggedin ) )
            {
                //redirect( 'user/denied' );
            }
        }
    }
}

最佳答案

在您的 Controller 中执行此操作。为了方便起见,您可以在 application/core 文件夹中创建一个名为 MY_Controller.php 的扩展文件,并将其扩展到您的 Controller ,例如

Other_controller 类扩展 MY_Controller{}

在application/core/MY_Controller.php中构造函数do..

class MY_controller extends CI_Controller{

  public function __construct() {

   parent::__construct();

   $config = [
   'hostname' => '',
   'username' => '',
   'password' => '',
   'database' => 'defaultdb',
   'dbdriver' => 'sqlsrv',
   'dbprefix' => '',
   'pconnect' => TRUE,
   'db_debug' => TRUE,
   'cache_on' => FALSE,
   'cachedir' => APPPATH .'cache',
   'char_set' => 'utf8',
   'dbcollat' => 'utf8_general_ci',
   'swap_pre' => '',
   'autoinit' => TRUE,
   'stricton' => FALSE
  ];

  if($this->uri->segment(4)){
       $config['database']=$this->uri->segment(4);
  }          

  $this->load->database($config);

  $this->db->reconnect();//shouldnt be required but try it if there is problem

  echo $this->db->database;//for testing 

}

关于php - Codeigniter 检查 index.php 文件中是否已登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539982/

相关文章:

php - 无法连接到 127.0.0.1,但 `mysqld` 正在监听

php - 如何根据检索到的列类型动态地将正确的类型分配给bind_param?

PHP:使用 Zend_Barcode 调整条形码的输出大小 | Magento 发票条形码

linux - 值得注意的是访问根目录中的文件夹

php - 如何在 PHP 中比较关联数组与 result_array

php - jquery,将png数据添加到src attr中~

python - 为什么一个简单的减法会导致不同的输出?

mysql - 在 MySQL 中将字符转换为 UTF8(É 到 é)

mysql - 为每位医生制作一份预约 list ;包括医生姓名、患者姓名、日期、时间和持续时间

php - 将带有 user_id 的用户 session 设置到 codeigniter 中的购物车库