2016-06-30 32 views
0

我做一些數據庫事務和設定$ new_user = TRUE這樣在模型中設置會話是不好的做法嗎?

型號代碼:

$data_insert = array 
        (
         'username' => $username_post, 
         'password'=>$username_post, 

        ); 
        $this->db->insert('Tenant', $data_insert); 
        $new_tenant_id = $this->db->insert_id(); 


        //CREATE TABLE FOR THAT DISTRIBUTOR 
        $this->dbforge->add_field(
         array(
           'id' => array(
            'type' => 'INT', 
            'constraint' => 10, 
            'unsigned' => TRUE, 
            'auto_increment' => TRUE 

           ), 
           'site_key' => array(
            'type' => 'VARCHAR', 
            'constraint' => '100', 
           ), 
           'display_name' => array(
            'type' => 'VARCHAR', 
            'constraint' => '100', 
            'null' => TRUE 
           ), 
            'ext' => array(
            'type' => 'VARCHAR', 
            'constraint' => '50', 
            'null' => TRUE 
           ), 
            'auth_user' => array(
            'type' => 'VARCHAR', 
            'constraint' => '100', 
            'null' => TRUE 
           ), 

            'password' => array(
            'type' => 'VARCHAR', 
            'constraint' => '128', 
            'null' => TRUE, 
           ), 
            'base_ini_id' => array(
            'type' => 'VARCHAR', 
            'constraint' => '50', 
            'null' => TRUE 
           ), 
            'md_user' => array(
            'type' => 'VARCHAR', 
            'constraint' => '128', 
            'null' => TRUE 
           ), 
            'uc_user' => array(
            'type' => 'VARCHAR', 
            'constraint' => '50', 
            'null' => TRUE 
           ), 
            'uc_password' => array(
            'type' => 'VARCHAR', 
            'constraint' => '100', 
            'null' => TRUE 
           ), 
            'comments' => array(
            'type' => 'VARCHAR', 
            'constraint' => '200', 
            'null' => TRUE 
           ), 
            'custom_ini_filename' => array(
            'type' => 'VARCHAR', 
            'constraint' => '100', 
            'null' => TRUE 
           ), 
            'email' => array(
            'type' => 'VARCHAR', 
            'constraint' => '100', 
            'null' => TRUE 
           ), 

          )); 

         $this->dbforge->add_key('id', TRUE); 

        if (!$this->db->table_exists('table_name')) 
        { 
          $this->dbforge->create_table($usertable); 

        } 


        //TABLE CREATED NOW ADD SOME DATA 

        $insert_data = array 
        (
         'site_key' =>$site_post, 
         'tenant_id'=>$new_tenant_id 
        ); 
        //TENANT CREATED AND THE SITE BY HIM IS ADDED TO DATABASE 
        $query = $this->db->insert('MLCSites',$insert_data); 
        $new_user = TRUE; 

現在,如果我在數據庫中的用戶,然後如果沒有$驗證設置爲TRUE我檢查$ new_user ==真,那麼我設置的loggedIn我會像這樣= TRUE:

if(!empty($validate)) 
{ 
    if ($validate == TRUE) 
    { 

     // Log in user 
     $data = array(
      'site' => $site->site_post, 
      'id' =>$tenant_id, 
      'username'=>$username_post, 
      'user_table'=>$usertable, 
      'nec_distributor'=>TRUE, 
      'loggedin' => TRUE, 
     ); 
     $this->session->set_userdata($data); 

     return TRUE; 
    } 

    elseif ($new_user == TRUE) 
    { 
     // Log in user 
     $data = array(
      'site' => $site->site_post, 
      'id' =>$new_tenant_id, 
      'username'=>$username_post, 
      'user_table'=>$usertable, 
      'nec_distributor'=>TRUE, 
      'loggedin' => TRUE, 
     ); 
     $this->session->set_userdata($data); 
     return TRUE; 
    } 

    return FALSE; 
} 

現在在我的控制我檢查是這樣的:

$dashboard ='customer/dashboard'; 
     $rules = $this->distributor_m->rules; 
     $this->form_validation->set_rules($rules); 

if ($this->distributor_m->login() == TRUE) 
     { 

      var_dump($this->session->all_userdata()); 



       $this->distributor_m->loggedin() == FALSE || redirect($dashboard); 

       redirect($dashboard); 

     } 
     else 
     { 


      $this->session->set_flashdata('error', 'That email/password combination does not exist'); 
      //redirect('secure/login', 'refresh'); 
     } 

但是,當我提交用戶名和密鑰,所有數據庫事務都按照代碼成功完成。但是我的會話中沒有任何內容,如果我重新發送表單信息,那麼我會看到SESSION數據。那麼我哪裏錯了?

+0

是否有任何與我的會話變量? – Rajan

+0

您是否在登錄時使用ajax提交表單? –

+0

不,我只是一個正常的提交@RajJagani – Rajan

回答

0

此代碼正常工作。有一瞥。 在這種情況下,我有兩個類型的用戶:管理員和客戶

public function index() 
{ 

    if(($this->session->userdata('logged_in'))){ 
     redirect('/customer/dashboard/', 'refresh'); 
    } 

    if(isset($_POST['username']) && isset($_POST['password'])){ 
     $this->form_validation->set_rules('username', 'Username', 'required'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 
     $username = $_POST['username'] ; 
     $password = md5($_POST['password']); 



     if ($this->form_validation->run() == FALSE) 
     { 
      echo "not success"; 
     } 
     else 
     { 
      $this->load->model('Book_upload'); 
      $user_details = $this->Book_upload->validate_user_login($username,$password); 
      if(count($user_details)==0){ 
       echo "Invalid Login"; 
      } else { 
       $newdata = array(
         'userid' => $user_details[0]['AdminId'], 
         'username' => $user_details[0]['UserName'], 
         'role' => $user_details[0]['Role'], 
         'fullname' => $user_details[0]['FullName'], 
         'logged_in' => TRUE 
       ); 

       $this->session->set_userdata($newdata); 
       $session_flag = $this->session->all_userdata(); 

        if($session_flag['role'] == 'customer') 
         redirect('/customer/home/', 'refresh'); 
       if($session_flag['role'] == 'admin') 
        redirect('/admin/dashboard/', 'refresh'); 
      } 
     } 
    } 

    $this->load->view('customer/login'); 
} 
+0

我有一個單獨的模型用於usertype:Distributor。基本上我正在做的是我檢查http_reffer是否來自預期的來源,如果是的話我檢查它的用戶名和密鑰,如果它們是有效的,我可以訪問正常的客戶儀表板,即客戶/儀表板,即正常用戶的儀表板,客戶和經銷商都是一樣的,它只是理解哪一個是正常客戶的方式,哪一個是來自http_reffer源的東西 – Rajan

1

沒有好的和壞的,你可以做任何你想要的。但是我們用來只與數據庫交互的模型。所以Controller是處理所有網站的人。

所以它更好,如果你在控制器中添加會話。它在某些方面也有幫助。


例如:如果你設置flashdata你要重定向的頁面。所以在模型中你不能存檔它。但是如果你在控制器上做同樣的事情,你可以重定向到你想要的地方。

$this->session->set_flashdata('item', 'value'); 
redirect('controller/name'); 
+0

更新了問題@abdulla – Rajan

+0

@Rajan是模型中的這個? '$ query = $ this-> db-> insert('MLCSites',$ insert_data); $ new_user = TRUE;' –

+0

是在模型中 – Rajan

1

1)不要在會話中存儲的所有信息。將長隨機字符串用作令牌。將該令牌存儲在會話中。使用該標記從數據庫中檢索用戶詳細信息。請注意,我不是在談論將codeigniter會話本身保存到數據庫。使用會話文件。製作你自己的用戶表,以保存用戶名,網站等等。當然還有其他一些細節,比如註冊日期,最後活動日期等。

2)先設置會話。在做其他事情之前。特別是在創建新的數據庫表之前,重要的是:-)

3)會話已設置。下一頁或用戶點擊啓動表創建的內容。在創建表之前,驗證會話是否有效。

4)模型可以用於很多事情,而不僅僅是與數據庫交互。在控制器方面有兩個設計學派 - 聰明的人主張「精簡控制器」,它們乾淨,易於維護,並且更不容易出錯。還有那些充斥着代碼的控制器,因此擁有「胖控制器」。不會說哪個更好 - 所以我只是暗示它:-)

相關問題