【发布时间】:2015-02-16 11:05:48
【问题描述】:
我真的需要帮助,我在 2 天前自己寻求解决方案,但没有结果。 我需要检查用户是否登录使用:
$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 存储在会话变量中,因此我需要进行此测试:
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;
平均问题是我需要通过 url 使用不同的数据库。如果用户输入此链接,例如:/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' );
}
}
}
}
【问题讨论】:
-
我什么都不懂。根据用户,您将连接到不同的数据库?你有多少分贝?为什么在 index.php 中,您可以在配置文件中声明所有数据库,然后在模型的构造函数中选择您需要的数据库。
-
我想通过 url 使用不同的数据库,例如对于这个 url : /user/login/56 系统必须使用名为 56 的数据库
-
问题是我需要通过 url 使用不同的数据库。如果用户输入此链接,例如:/user/login/34,他将使用名为 34 的数据库。我无法找到解决此问题的方法
-
CodeIgniter 有 URI 助手,所以你不需要自己做解析。 CI 将更加健壮。你可以访问像
$this->uri->segment(4); -
@MikeMiller,因为 uri 库还没有加载!
标签: php mysql codeigniter