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

时间:2014-11-10 11:40:07

标签: php codeigniter session

我的verify_logins控制器中有以下方法:

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);
}

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

我正在尝试在主页中加载登录用户的用户名。我正在尝试使用checkLogInInfo()将控制器verify_logins()的方法index()中的用户名传递给控制器​​admin_logins()的方法session,但无法找到正确的这样做的方式。我猜我在控制器的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

P.S。我已经在两个控制器中加载了会话库。

1 个答案:

答案 0 :(得分:3)

将用户名设置为

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

当你正在检索给予

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

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