【问题标题】:How to apply all session in all controller in codeigniter?如何在codeigniter的所有控制器中应用所有会话?
【发布时间】:2018-09-24 15:32:36
【问题描述】:

创建session时遇到问题
登录系统没有错误,我可以打印session数据,但我的问题是

首先,当我从一个页面移动到另一个页面时,没有找到 session 数据,我可以通过写入我的保护 URL 来打开任何功能,而无需将我转移到登录页面

第二:我想在所有控制器中应用所有会话

这是我的代码: 控制器

class Users extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library('session');
    //  print_r($this->session->userdata);

    }

    public function Login()
    {
        if($this->input->post("login"))
        {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("username","UserName",'required|min_length[3]|max_length[30]|alpha');
            $this->form_validation->set_rules("password","password",'required|min_length[3]|max_length[30]');
            if ($this->form_validation->run())
            {
                $username=$this->input->post("username");
                $password=$this->input->post("password");
                $encpassword=md5($password);
                $this->load->model("DatabaseModel");

                if($info=$this->DatabaseModel->mainlogin($username,$encpassword))
                {
                    if(is_object($info)){

                            $session_data=array(
                                'username' => $info->username,
                                'id'       =>$info->id,
                                'email' => $info->email,
                                'image' => $info->image

                            );
                        $this->session->set_userdata($session_data);
                    }
                    $this->session->set_userdata($session_data);
                    redirect(site_url("Dashboard/index"));

                }else{
                    $this->session->set_flashdata('error', 'Error With Login ');
                    redirect(site_url("Users/login"));
                }

            }else{
                //error for validation
            }
        }

        $data['pagetitle']="IStore | Login";
        $this->load->view("users/login",$data);
        //$this->load->view("users/login");
    }

    public function logout()
    {
        $this->session->unset_userdata('username');
        $this->session->unset_userdata('id');
        $this->session->unset_userdata('email');
        $this->session->unset_userdata('image');
        redirect(site_url("Users/login"));
    }
}

这是我的数据库模型

public function mainlogin($username,$password)
{
    $this->db->select('*');
    $this->db->from("users");
    $this->db->where('username',$username);
    $this->db->where('password',$password);
    $sql=$this->db->get();
    return $sql->row();
}

【问题讨论】:

标签: php mysql codeigniter


【解决方案1】:

自动加载.php

你应该在配置文件夹的 autoload.php 文件中设置你的会话库

/* | -------------------------------------------------- ----------------- |自动加载库 | -------------------------------------------------- ----------------- |这些是位于 system/libraries 文件夹中的类 |或在您的应用程序/库文件夹中。 | |原型: | | $autoload['libraries'] = array('database', 'session', 'xmlrpc'); */ $autoload['libraries'] = array('session');

在 autoload.php 中设置会话后,您可以在所有控制器中获取会话数据,然后您可以检查会话是否已销毁,如果您的会话已销毁,则可以从该页面重定向用户

这是如何防止用户在没有登录的情况下访问页面的答案

codeigniter check for user session in every controller

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多