我正在尝试为朋友初始化代码点火器项目时遇到一个奇怪的问题。
我有一个控制器user
,有两个功能:login
和dashboard
login
功能:
function login()
{
if ($this->user_model->isLoggedIn())
redirect('user', 'refresh');
else
{
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Login', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if (!$this->form_validation->run())
$this->load->view('login');
else
{
$username = $this->input->post('username');
$password = $this->input->post('password');
$validCredentials = $this->user_model->validCredentials($username, $password);
if ($validCredentials)
redirect('user/dashboard', 'refresh');
else
{
$data['error_credentials'] = 'Wrong Username/Password';
$this->load->view('login', $data);
}
}
}
}
dashboard
函数:
function dashboard()
{
$data = array();
$data['test'] = $this->session->all_userdata();
if($this->user_model->isLoggedIn())
$this->load->view('dashboard');
else
$this->load->view('sashboardnon', $data);
}
在登录视图中,有一个poiting login
函数的表单,当我登录时,凭借良好的凭据,我被重定向到sashboardnon视图,这不是我所期待的。 / p>
这是我的user_model.php:
class User_model extends CI_Model
{
function User_model()
{
parent::__construct();
$this->load->library('session');
}
function validCredentials($username, $password)
{
$this->load->library('encrypt');
$password = $this->encrypt->sha1($password);
$req = "SELECT username, password FROM users WHERE username = ? AND password = ?";
$data = array($username, $password);
$req = $this->db->query($req, $data);
if ($req->num_rows() > 0)
{
$res = $req->result();
$session_data = array(
'username' => $res[0]->username,
'logged_in' => TRUE,
);
$this->session->set_userdata($session_data);
return true;
}
else
return false;
}
function isLoggedIn()
{
if ($this->session->userdata('logged_in'))
return true;
else
return false;
}
function logout()
{
$this->session->sess_destroy();
}
}
当我查看数据库中的ci_sessions表时,我看到当我点击登录按钮时有两个新条目。一个是我刚刚从我的user_model添加的userdata,另一个没有它。
问题是,当创建db中的第二个条目时,将删除userdata中的值。所以我无法登录。
有人知道问题可能来自哪里吗?
由于
答案 0 :(得分:0)
我认为上面的代码非常符合逻辑,你应该纠正它。您必须将逻辑从模型移动到控制器。此外,将会话管理放在Controller中,并尝试仅使用Model与数据库进行交互。
(1)模型
class User_model extends CI_Model {
function User_model()
{
parent::__construct();
}
function get($params)
{
if(isset($params)) {
$this->db->where("username", $params['username']);
$this->db->where("password", $params['password']);
$query = $this->db->get(users);
if ($query->num_rows() > 0) {
return $query->result();
}
}
return false;
}
}
(2)控制器
class Auth extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model("users_model", "user");
}
function isLogdedIn()
{
if ($this->session->userdata('logged_in')) {
return true;
}
return false;
}
function login()
{
if ($this->isLoggedIn()) {
redirect('user', 'refresh');
}
else {
// show login form and put the logic here
}
}
function logout()
{
$this->session->sess_destroy();
}
function validateCredentials($username, $password)
{
$params = array('username' => $username, 'password' => $password);
$result = $this->user->get($params);
if($result !== false) {
return true;
}
return false;
{
}
我希望上面的示例可以帮助您改进代码;)