在我刷新网站上任何页面的随机时间之后登录后,有时它会完美运行,但有时会显示错误,例如试图在不同的模型和控制器文件行上获取属性。
例如,当我刷新页面时,错误显示在名为user_model的模型的下方函数和名为User.php的控制器中:
User_model.php:
public function get_client_id($email)
{
$this->db->select('id');
$this->db->where('email', $email);
$query = $this->db->get('crm_accounts');
$result = $query->row();
return $result->id; //line 135
}
Users.php:
$email = $_SESSION['email'];
$id = $this->user_model->get_client_id($email); //line 145
登录后设置会话值:
$email = $this->input->post("email");
$password = $this->input->post("pass");
$result = $this->user_model->login($email, $password);
if ($result == TRUE)
{
$this->session->set_userdata('email',$email);
$this->session->set_userdata('logged_in',TRUE);
$data = $this->user_model->get_username($email);
$this->session->set_userdata('data', $data);
redirect('admin_view');
}
else
{
$this->load->view('all_field');
}
注销后删除会话的代码:
$logged_in = $this->session->userdata('logged_in');
$log = $this->session->userdata('email');
if($logged_in || (!empty($log)))
{
$array_item = array('email', 'logged_in');
$this->session->unset_userdata($array_item);
redirect('');
}
else
{
$this->load->view('error_page');
}
在这里,我得到了错误 要在user_model.php的第135行获取非对象的属性,并在backtrace中找到第145行的Users.php错误
我注意到当我在模型中遇到这种类型的错误时,我使用会话数据存储的会话变量$ email获取该特定方法中的数据。但我把这样的条件放在控制器中:
public function index()
{
if(!empty($_SESSION['email']))
{
$email = $_SESSION['email'];
$data = $this->user_model->get_username($email);
$this->session->set_userdata('data',$data);
redirect('clientview');
//echo "You are already logged in";
}
else
{
$this->load->view('signup');
}
}
因此,如果未设置会话变量$ email的值,则应该在注册页面上进行。
所以,我没有得到实际问题。因为有时候它完美有效,有时则不然。一旦我得到这样的错误,我必须清除我的历史,而不是我必须再次登录。
答案 0 :(得分:0)
在Codeigniter
中,您可以通过特定方式在会话中获取表单或设置值。
如果要检查会话是否存在,则需要执行
$this->session->userdata('email');
将检索存储的值。 正如你已经做的那样:
$this->session->set_userdata('email', $email);
在会话中设置值。
此外,当用户注销yoi需要重置存储的值时,它将永远不会为空。
$ this-> session-> set_userdata('email','');
注意:你所做的当然不是做这类东西的最佳方式,如登录和注销系统。我想你只是在学习,而你这样做并不是为了生产应用程序。
如果您这样做,请尝试使用ionAuth
Codeigniter
身份验证库,您可以在此处找到:
http://benedmunds.com/ion_auth/
并按照一些教程进行操作:
http://www.tutorials.kode-blog.com/codeigniter-authentication
请记住,用户身份验证是一个严重的安全问题,因此请小心。