我做了一些数据库事务,并且设置 $ 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数据。那么我哪里出错?
答案 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');
}