首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有时试图获取非对象的属性。

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

Stack Overflow用户
提问于 2016-10-03 19:30:24
回答 1查看 535关注 0票数 0

当我在网站上刷新任何页面时,经过一段时间的随机登录后,有时会运行得很好,但有时会出现错误,比如试图在不同的模型和控制器文件行上获得属性。

例如,当我刷新页面错误时,如下所示,模型名为user_model,控制器名为User.php:

User_model.php:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
$email = $_SESSION['email'];
$id = $this->user_model->get_client_id($email); //line 145

在登录后设置会话值:

代码语言:javascript
运行
复制
                $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');
                }

注销后删除会话的代码:

代码语言:javascript
运行
复制
    $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');
        }

在这里,我发现了Tring在user_model.php的第135行上获得非对象属性的错误,在回溯中它在第145行的Users.php上发现了错误。

我已经注意到,当我在模型中得到这种类型的错误时,我使用存储会话数据的会话变量$email来获取特定方法中的数据。但我已向控权人提出了这样的条件:

代码语言:javascript
运行
复制
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的值没有设置,那么它应该在注册页面上进行。

所以,我不明白什么是真正的问题。因为有时候它工作得很完美,有时却不行。一旦我犯了这样的错误,我就必须清除我的历史,而不是再次登录。

EN

回答 1

Stack Overflow用户

发布于 2016-10-03 20:35:39

Codeigniter中,您有一种在会话中获取表单或设置值的特定方法。

如果要检查会话是否存在,则需要执行以下操作:

代码语言:javascript
运行
复制
$this->session->userdata('email');

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

代码语言:javascript
运行
复制
$this->session->set_userdata('email', $email);

若要在会话中设置值,请执行以下操作。

另外,当用户正在注销yoi时,需要重置存储的值,但实际上它永远不会是空的。

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

注意:您所做的当然不是这样做的最佳方式,比如登录和注销系统。我想你只是在学习,你这样做并不是为了一个生产应用程序。

如果需要,请尝试将ionAuth身份验证库用于Codeigniter,您可以在这里找到:

auth/

然后学习一些关于它的教程:

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39839044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档