如何在 CodeIgniter 的不同控制器中传递会话数据

Posted

技术标签:

【中文标题】如何在 CodeIgniter 的不同控制器中传递会话数据【英文标题】:How to pass session data in different controller in CodeIgniter 【发布时间】:2015-01-06 17:02:34 【问题描述】:

我的verify_loginscontroller 中有以下方法:

function checkLogInInfo() 
    if ($_POST) 
        $v = $this->input->post('user_id');
        $vldata['password'] = $this->input->post('password');

        $query1 = $this->db->query("SELECT e.id FROM user u LEFT JOIN employee e ON u.user_id = e.id WHERE e.emp_id = '$v' ")->result_array();

        if (empty($query1)) 
            $this->session->set_flashdata('message', 'Invalid ID or Password');
            redirect('verify_logins/index');
         else 
            $vldata = array();
            $vldata['user_id'] = $query1[0]['id'];

            $temp = $vldata['user_id'];
            $query2 = $this->db->query("SELECT e.emp_name FROM user u LEFT JOIN employee e ON u.user_id = e.id WHERE e.id ='$temp' ")->result_array();

            $vldata['user_name'] = $query2[0]['emp_name'];

            $this->session->set_userdata($vldata['user_name']);
            redirect('admin_logins/index');
        
     else 
        redirect('verify_logins/index');
    

上述方法检查我的登录数据并登录到我的应用程序的主页。

现在我有了另一个名为 admin_logins 的控制器,方法如下:

public function index() 
    $data["message"] = $this->session->flashdata('message');
    $data["user_name"] = $this->session->userdata($vldata['user_name']);
    $this->load->view('admin_logins/index', $data);

上述方法加载我的应用程序的主页。

我正在尝试在主页中加载登录用户的用户名。我正在尝试使用 session 将用户名从控制器 verify_logins() 的方法 checkLogInInfo() 传递给控制器​​ admin_logins() 的方法 index(),但无法找出正确的方法。我可以猜到我在控制器的index() 方法中有一些语法问题。我需要有关正确语法和方法的帮助。

我试图显示用户名的视图页面部分是:

<p class="f-right">User: <strong><?php if(isset($user_name))echo "Welcome, ".$user_name; ?></strong></p>

我得到的错误是:

A PHP Error was encountered
Severity: Notice
Message: Undefined variable: vldata

附:我已经在两个控制器中加载了会话库。

【问题讨论】:

【参考方案1】:

设置用户名为like

$this->session->set_userdata('user_name',$vldata['user_name']);

当你检索给予时

$data["user_name"] = $this->session->userdata('user_name');

您必须在设置会话数据时将会话变量名称作为第一个参数传递,以便您可以使用相同的键来检索会话数据。更多信息请阅读this

【讨论】:

我的电脑或浏览器出现问题,过去几天我无法阅读 CI 用户指南中的任何内容。这就是为什么我不能早点经历这件事。 +1 以获得出色的答案和解释。现在对我来说一切都清楚了。

以上是关于如何在 CodeIgniter 的不同控制器中传递会话数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据 Codeigniter 控制器传递给 Angularjs 控制器

无法将变量从控制器传递到模型以处理codeigniter中的多个上载字段

如何将结果从模型传递到 CodeIgniter 中的控制器?

如何在 Codeigniter 中将变量从一个控制器传递到另一个控制器

CodeIgniter:将参数从视图传递到控制器?

Ajax 请求 Codeigniter