[英]CodeIgniter - Using FlashData WITH Sessions Stored in database
[英]Codeigniter using sessions in Database class
我在codeigniter項目中需要您的幫助。 我想使用會話來動態更改config文件夾中的databse文件。 我在配置文件中執行$ db ['default'] ['database'] = $ _SESSION ['db_name'],但不起作用。 登錄頁面應檢查其他哪些數據庫訪問權限可以登錄。
選擇數據庫之前可以更改連接嗎?
登錄頁面
public function login(){
if(!$this->session->userdata('id_funcionario') || !$this->session->userdata('logado')){
$this->db->database= "test";
$this->session->destroy();
$subdomain = $_SERVER['HTTP_HOST'];
$this->db->select("database");
$this->db->where("subdomain", $subdomain);
$access = $this->db->get("table")->row();
$this->session->set_userdata("database", $access->database);
$this->load->view('/geral/login');
}else{
$url = base_url('home');
header("Location: $url ");
}
}
登錄頁面有效!
數據發送給AJAX,以:
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
class Ajax extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->helper('url');
$this->load->helper('html');
$this->load->library('session');
}
public function toLog()
{
$email = $this->input->post('email');
$pass= md5($this->input->post('pass'));
$this->db->database = $this->session->userdata('database');
$this->db->select('*');
$this->db->from('users');
$this->db->where('usu_email',$email);
$this->db->where('usu_pass',$pass);
$usuario = $this->db->get()->result();
但是我不知道如何在查詢時更改數據庫的名稱。 我已經嘗試過了,它保持不變。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Database Driver Class
*
* This is the platform-independent base DB implementation class.
* This class will not be called directly. Rather, the adapter
* class for the specific database will extend and instantiate it.
*
*/
class CI_DB_driver {
var $username;
var $password;
var $hostname;
var $database;
.......
/**
* Constructor. Accepts one parameter containing the database
* connection settings.
*
* @param array
*/
function __construct($params)
{
if (is_array($params))
{
foreach ($params as $key => $val)
{
$this->$key = $val;
}
}
$CI = & get_instance();
$this->database = $CI->session->userdata('database');
log_message('debug', 'Database Driver Class Initialized');
}....
你可以幫幫我嗎?
我不確定這是否可以回答您的問題,但可能會有所幫助。
https://www.codeigniter.com/user_guide/database/connecting.html#connecting-to-multiple-databases
您可以隨時使用來切換數據庫
$this->db->db_select($database2_name);
但是在代碼中,您破壞了會話,然后嘗試設置會話數據變量。 會話已被破壞,因此在創建新會話之前不會在任何地方設置變量。
我建議您將數據庫設置為配置文件中的組並切換組。 或者,您可以按照文檔中的說明一次連接到這兩者,並通過使用數據庫對象設置查詢對象來選擇使用哪一個。 雖然老實說,我確實認為也許您需要重新審視邏輯,因為在會話變量中設置數據庫似乎是解決IMHO任何問題的一種很奇怪的方法。
但是,如果您在控制器中讀取了會話變量,請檢查它是否為系統公認的數據庫,請檢查是否允許用戶訪問它,然后連接到它,應該可以正常工作。 您不應該嘗試訪問配置文件中的會話數據,因為在讀取配置文件時,會話數據可能將不可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.