未定义的属性:CI::$session

Posted

技术标签:

【中文标题】未定义的属性:CI::$session【英文标题】:Undefined property: CI::$session 【发布时间】:2014-07-21 14:37:07 【问题描述】:

我在登录页面上加载模型时遇到问题。这里的会话有问题。我有一个安全类助手,其中 $key 是其中的一部分。但我认为这与错误所说的会话有关。

我想我已经设置了正确的 num 行,不确定这是否也是原因。

A php Error was encountered
Severity: Notice
Message: Undefined property: CI::$session
Filename: core/Model.php
Line Number: 51

型号

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Users_model extends CI_Model 

    private $user_id;
    private $username;
    private $permission = array();

    public function __construct() 

        if (isset($this->session->userdata['user_id'])) 
            $user_query = $this->db->query("SELECT * FROM " . $this->input->post('dbprefix') . "user WHERE user_id = '" . (int)$this->session->userdata['user_id'] . "' AND status = '1'");

            if ($user_query->num_rows) 
                $this->user_id = $user_query->row['user_id'];
                $this->username = $user_query->row['username'];

                $this->db->query("UPDATE " . $this->input->post('dbprefix') . "user SET ip = '" . $this->db->escape($this->input->server['REMOTE_ADDR']) . "' WHERE user_id = '" . (int)$this->session->userdata['user_id'] . "'");

                $user_group_query = $this->db->query("SELECT permission FROM " . $this->input->post('dbprefix'). "user_group WHERE user_group_id = '" . (int)$user_query->row['user_group_id'] . "'");

                $permissions = unserialize($user_group_query->row['permission']);

                if (is_array($permissions)) 
                    foreach ($permissions as $key => $value) 
                        $this->permission[$key] = $value;
                    
                
             else 
                $this->logout();
            
        
    

    public function login($username, $password) 
        $user_query = $this->db->query("SELECT * FROM " . $this->input->post('dbprefix') . "user WHERE username = '" . $this->db->escape($username) . "' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))) OR password = '" . $this->db->escape(md5($password)) . "') AND status = '1'");

        if ($user_query->num_rows) 
            $this->session->userdata['user_id'] = $user_query->row['user_id'];

            $this->user_id = $user_query->row['user_id'];
            $this->username = $user_query->row['username'];         

            $user_group_query = $this->db->query("SELECT permission FROM " . $this->input->post('dbprefix') . "user_group WHERE user_group_id = '" . (int)$user_query->row['user_group_id'] . "'");

            $permissions = unserialize($user_group_query->row['permission']);

            if (is_array($permissions)) 
                foreach ($permissions as $key => $value) 
                    $this->permission[$key] = $value;
                
            

            return true;
         else 
            return false;
        
    

【问题讨论】:

【参考方案1】:

如果您在代码中使用会话,请确保通过设置加密密钥自动加载 config.php 文件。如果您不自动加载它,那么您可以使用$this-&gt;load-&gt;library('session') 加载它。 但是您必须设置加密密钥才能在控制器功能中自动加载或加载会话。

这里有详细信息。 Working with sessions in codeigniter

【讨论】:

死链接使这个答案毫无用处。【参考方案2】:

加上已启动的会话,您需要在构造函数中检查父级或在构造函数中编写此代码:**parent::__construct();**

【讨论】:

这很重要。 (但没有* 字符) 正是我想要的 :) 我想授权用户是否可以在当前控制器中访问这些方法,或者在我的构造函数中没有。你的回答解决了它。

以上是关于未定义的属性:CI::$session的主要内容,如果未能解决你的问题,请参考以下文章

未定义的属性:CI_Loader::$input

[karma-server]:TypeError:无法读取未定义的属性“范围”-CI 环境中的 Angular 单元测试

为啥不断在 codeigniter 上获得未定义的属性?

Jest TypeError:无法读取 JestAdapter 中未定义的属性“绑定”

codeigniter 返回“消息:未定义的属性:Welcome::$load”试图加载帮助程序库

codeigniter 致命错误:调用未定义的方法 CI_DB_odbc_driver::update()