在模型中设置会话是不好的做法?

时间:2016-06-30 13:17:21

标签: php codeigniter

我做了一些数据库事务,并且设置 $ new_user = TRUE 就像这样

型号代码:

newid()

现在,如果我有数据库中的用户,那么$ validate设置为TRUE,如果不是我检查$ new_user == TRUE然后我在我的会话中设置loggedin = 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;

现在在我的控制器中,我这样检查:

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;
}

但是当我提交用户名和密钥时,所有数据库事务都按照代码成功完成。但是在我的会话中没有任何内容,如果我重新发送表单信息,那么我会看到SESSION数据。那么我哪里出错?

3 个答案:

答案 0 :(得分:1)

没有好的和坏的你可以做任何你想做的事情。但模型我们过去只与数据库进行交互。所以Controller是处理所有站点的人。

如果您在控制器 中添加会话,那么 会更好。它在某些方面也很有用。

  

例如:如果设置flashdata,则必须重定向页面。所以在模型中你无法存档它。但如果您在控制器上执行相同操作,则可以根据需要重定向。

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

答案 1 :(得分:1)

1)不要将所有信息存储在会话中。创建一个长随机字符串以用作标记。将该令牌存储在sesssion中。使用该标记从数据库中检索用户详细信息。请注意,我不是在谈论将codeigniter会话本身保存到数据库。使用会话文件。制作您自己的用户表以保存用户名,网站等。当然还要提供一些其他详细信息,如注册日期,上次活动日期等。

2)首先设置会话。在你做其他事之前。特别是在做一些像创建新数据库表这样重要的事情之前: - )

3)会话已设置。下一页或用户点击启动表创建的内容。在创建表之前,请验证会话是否有效。

4)模型可以用于许多事情,而不仅仅是与数据库交互。在控制器方面有两个设计学派 - 明智的人主张“瘦控制器”,它们干净,易于维护,更不容易出错。还有那些把控制器装满代码并因此拥有“胖控制器”的人。不会说哪个更好 - 所以我只是暗示它: - )

答案 2 :(得分:0)

此代码工作正常。有一瞥。 在这种情况下,我有两种用户:admin和customer

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');
}