有时试图获取非对象的属性

时间:2016-10-03 19:30:24

标签: php session session-variables codeigniter-3

在我刷新网站上任何页面的随机时间之后登录后,有时它会完美运行,但有时会显示错误,例如试图在不同的模型和控制器文件行上获取属性。

例如,当我刷新页面时,错误显示在名为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的值,则应该在注册页面上进行。

所以,我没有得到实际问题。因为有时候它完美有效,有时则不然。一旦我得到这样的错误,我必须清除我的历史,而不是我必须再次登录。

1 个答案:

答案 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

请记住,用户身份验证是一个严重的安全问题,因此请小心。