简体   繁体   English

CodeIgniter userdata对于Session不起作用

[英]CodeIgniter userdata For Session won't work

I am trying to create a blog site , i have a database named ci_test it has two table users and article . 我正在尝试创建一个博客站点,我有一个名为ci_test的数据库,它有两个表用户和文章。 I have an issue with the session that can't fix. 我有一个无法解决的会话问题。 I set- 我设置-

$config['encryption_key'] = '1234';

Also, set the property 另外,设置属性

$autoload['libraries'] = array('database','session');

But it gives the error : 但它给出了错误:

Severity: Notice 严重性:注意

Message: Undefined property: Admin::$session 消息:未定义的属性:Admin :: $ session

Filename: controllers/admin.php 文件名:controllers / admin.php

Line Number: 18 行号:18

My login code is: 我的登录代码是:

<?php

class Login extends MY_Controller{

    public function index()
    {
        $this->load->helper('form');
        $this->load->view('public/admin_login');
    }

        public function admin_login()
    {
        $this->load->library('form_validation');

        $this->form_validation->set_rules('username','user name','required|alpha|trim');
        $this->form_validation->set_rules('password','password','required');

        $this->form_validation->set_error_delimiters('<p class="text-danger">','</p>');

        if($this->form_validation->run())
        {

            $username = $this->input->post('username');
            $password = $this->input->post('password');

            $this->load->model('loginmodel');
            $login_id = $this->loginmodel->login_valid($username, $password);
            if($login_id)
            {
                //$this->load->library('session');
                $this->session->set_userdata('user_id', $login_id);

                redirect('admin/dashboard');
            }
            else{
                echo 'password dont'; 
            }

        }
        else
        {
            $this->load->view('public/admin_login');
        }


    }
}

Updated from comment login model 从评论登录模型更新

class Loginmodel extends CI_Model{ 

public function login_valid($username, $password) {

$q = $this->db->where(['uname'=>$username,'pword'=>$password])->g‌​et('users'); 

if($q->num_rows()) { 

return $q->row()->id; //return TRUE; } else{ return FALSE; 

} 

}

admin controller: 管理控制器:

<?php

class Admin extends CI_Controller{

    public function dashboard()
    {


        $this->load->model('articlesmodel','article');

        $articles = $this->article->articles_list();

        $this->load->view('admin/dashboard',['articles'=> $articles]);
    }

    public function __construct()
    {
        if(! $this->session->userdata('user_id'))
        {
            redirect('login');
        }       
    }


}

Model: 模型:

<?php

class Articlesmodel extends CI_Model{

    public function articles_list()
    {

        $user_id = $this->session->userdata('user_id');
        $query = $this->db->select('title')->where('user_data',$user_id)->get('articles');

            return $query->result();        
    }


}

view: 视图:

<div class="container">
    <table class="table">
    <thead>
        <tr>
            <td>Serial no</td>
            <td>Article List</td>

            <td>#</td>
        </tr>
    </thead>
    <tbody>
<?php if(count($articles)): ?>
    <?php foreach($articles as $article): ?>
        <tr>
            <td>
                1
            </td>
            <td>
            <?= $article->title; ?>
            </td>

            <td>
                <a class="btn btn-primary">Edit</a>
                <a class="btn btn-danger">Delete</a>
            </td>
        </tr>
    <?php endforeach;?>
    <?php else:?>
        <tr>
            <td colspan="3">Record not found</td>
        </tr>
<?php endif;?>  
    </tbody>
</table>
</div>

Make sure your file name is controllers/Admin.php instead of controllers/admin.php first letter always upper case only same applies for classes 确保你的文件名是controllers/Admin.php而不是controllers/admin.php第一个字母总是大写只有同样适用于类

And your construct() should all ways be below class and you are missing parent::__construct() 并且你的construct()应该在所有方面都在class下面并且你缺少parent :: __ construct()

<?php

class Admin extends CI_Controller {

    public function __construct() {
        parent::__construct(); // Missing
        if(! $this->session->userdata('user_id'))
        {
            redirect('login');
        }       
    }

    public function dashboard() {

    }

}

I think you have set it in a group. 我想你已经将它设置在一个组中。 where user_id is group name 其中user_id是组名

$data = array(
    'id' => $login_id->column_name
);

$this->session->set_userdata('user_id', $data);

Accessing data 访问数据

$id = $this->session->userdata('user_id');

$id['id'];

Or Try 或者尝试

$this->session->set_userdata(array('user_id' => $login_id->column_name)); // 

http://www.codeigniter.com/user_guide/libraries/sessions.html#adding-session-data http://www.codeigniter.com/user_guide/libraries/sessions.html#adding-session-data

Make sure if your using files in Ci3 you have set your path 确保您在Ci3中使用文件是否已设置路径

$config['sess_cookie_name'] = 'ci_sessions';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = FCPATH . 'application/cache/session/';

Codeigniter Encryption Key http://randomkeygen.com/ Codeigniter加密密钥http://randomkeygen.com/

$config['encryption_key'] = 'YyO29izmGbTj84kQPAkxkjI1Cz4Whe71';

Update 更新

public function login_valid($username, $password) {
    $this->db->where('uname', $username);
    $this->db->where('pword', $password);
    $query = $this->db->get('users');

    if ($query->num_rows() == 1) {
        return $query->row();
    } else {
        return false;
    }
}

Then on the controller if login correct 然后在控制器上如果登录正确

$login = $this->some_model->login($this->input->post('username'), $this->input->post('password'));

if ($login) {
    $this->session->set_userdata(array('user_id' => $login->column_name));
    redirect('successcontroller');
} else {
     // Error
}
$config['encryption_key'] = '1234';

That isn't going to work because CodeIgniter has requirements for it's encryption_key. 这不会起作用,因为CodeIgniter对它的encryption_key有要求。 See the docs here. 请参阅此处的文档。

https://codeigniter.com/userguide3/libraries/encryption.html https://codeigniter.com/userguide3/libraries/encryption.html

Try this 尝试这个

$key = $this->encryption->create_key(16);

And then use that key below 然后在下面使用该键

$config['encryption_key'] = 'YOUR KEY';

Alternatively, and even better, here's two websites that will generate CodeIgniter encryption keys for you. 或者,甚至更好,这里有两个网站将为您生成CodeIgniter加密密钥。

http://jeffreybarke.net/tools/codeigniter-encryption-key-generator/ http://jeffreybarke.net/tools/codeigniter-encryption-key-generator/

http://randomkeygen.com/ http://randomkeygen.com/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM