无法在会话codeigniter中设置用户数据

时间:2011-11-02 07:51:13

标签: codeigniter session

请看这个。

以下代码来自我的模型类(使用datamapper orm)

 function login()
    {

        $u = new User();


        $u->where('username', $this->username)->get();


        $this->salt = $u->salt;

        $this->validate()->get();


        if (empty($this->id))
        {
            // Login failed, so set a custom error message
            $this->error_message('login', 'Username or password invalid');

            return FALSE;
        }
        else
        {
            // Login succeeded
            $data = array
            (
                'username' => $u->username,
                'usergroup' => $u->usergroup->get(),
                'is_logged_in' => true

            );
            $this->session->set_userdata($data);


            return TRUE;
        }
    }

当我这样做时,我得到了

**Fatal error: Call to a member function set_userdata() on a non-object**

但是当我这样做时

$data = array
            (
                'username' => $u->username,
                'usergroup' => $u->usergroup->get(),
                'is_logged_in' => true
            );
            $obj=& get_instance();
            $obj->session->set_userdata($data);

有效。

请问正确的方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您的模型未扩展CI_Model 之后,您必须将构造函数添加到模型中 将此代码添加到您的

function __construct()
    {
        parent::__construct();
        $this->load->library('session');
    }

答案 1 :(得分:0)

嗯,你没有提供足够的信息。 第一个代码看起来很好,只要:

  1. 您实际上在调用之前加载了会话类(您还需要在配置中创建加密密钥)。 $this->load->library('session'); $this->session->set_userdata($data);

  2. 上述代码或代码位于控制器,模型或视图中。 $this与CI的超类相关,特别是与Session类的实例相关,因此如果您在帮助程序(函数集合)内部或在库内部(需要创建CI实例)中调用它首先),它将无法正常工作。