【问题标题】:Sometimes Trying to get property of non-object有时试图获取非对象的属性
【发布时间】:2017-02-11 20:05:32
【问题描述】:

在我刷新网站上的任何页面后随机时间登录后,有时它可以正常工作,但有时它会显示错误,例如尝试在模型和控制器文件的不同行上获取属性。

例如,当我刷新页面错误显示在名为 user_model 的模型和名为 User.php 的控制器的以下函数中:

用户模型.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 行获取非对象的属性,并在回溯中发现第 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 的值没有设置,那么它应该在注册页面上。

所以,我没有得到真正的问题。因为有时它工作得很好,有时却不行。一旦遇到此类错误,我必须清除我的历史记录,然后我必须重新登录。

【问题讨论】:

    标签: php session session-variables codeigniter-3


    【解决方案1】:

    Codeigniter 中,您可以通过特定方式在会话中获取表单或设置值。

    如果你想检查会话是否存在,你需要做

    $this->session->userdata('email');
    

    这将检索存储的值。 正如你已经做的那样:

    $this->session->set_userdata('email', $email);
    

    在会话中设置一个值。

    另外,当用户退出时,你需要重新设置存储的值,否则它永远不会为空。

    $this->session->set_userdata('email', '');

    注意:您所做的当然不是做此类事情的最佳方式,例如登录和注销系统。我想你只是在学习,而不是为了生产应用程序。

    如果这样做,请尝试使用CodeigniterionAuth 身份验证库,您可以在此处找到:

    http://benedmunds.com/ion_auth/

    并遵循一些关于它的教程:

    http://www.tutorials.kode-blog.com/codeigniter-authentication

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

    【讨论】:

    • 谢谢佛朗哥。正如你所说,我正在学习。所以,谢谢你的指示。
    • 但我想说注销后我正在通过 unset() 方法清除会话。但是我的注销问题之间有什么联系吗?
    • 您需要遵守Codeigniter 会话规则。正如我告诉你的,你必须重置会话 $this->session->set_userdata('email', '" ");,你的问题就在这里:if(!empty($_SESSION['email']))。
    • 知道了。感谢 Franco 的帮助。
    • 嗨 Franco,我已将您的建议应用到我的代码中。但有时我仍然会得到相同的“Tring to get the property of the non-object”。我忘了说每次我收到错误消息时都会收到“标头已发送”之类的消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多