Php codeigniter set_userdata在同一代码中工作,但不输出set_flashdata

Php codeigniter set_userdata在同一代码中工作,但不输出set_flashdata,php,session,codeigniter,Php,Session,Codeigniter,我有一个用户控制器,用于检查是否登录用户。它有这段代码。我可以设置set_userdata并在我的视图中回显它,但这不适用于我的flash数据,如下所示 public function login() { if($this->input->post('submit_login')) { // Get Posted Vars $username = $this->input->post

我有一个用户控制器,用于检查是否登录用户。它有这段代码。我可以设置set_userdata并在我的视图中回显它,但这不适用于我的flash数据,如下所示

 public function login()
    {
        if($this->input->post('submit_login'))
        {
            // Get Posted Vars
            $username = $this->input->post('username');
            $password  = md5($this->input->post('password'));

            // Run query to return 1 result if TRUE
            $query = $this->user_model->check_login($username, $password);

            if ($query == FALSE)
            {
                $this->session->set_flashdata('flashdata', 'Incorrect Username or Password doesnt show');
                $this->session->set_userdata('userdata', 'userdata works');
                // Query was wrong, set flash data and redirect to login
                $data['main_content'] = "user/login";
                $data['title'] = "Login";
                $this->load->view('template', $data);
            }
            else // Else Query returned 1 item
            {
                // Get the Variables
                $user_id = $query->row(0)->id;
                $username = $query->row(0)->username;
                $user_email = $query->row(0)->email;
                $user_type = $query->row(0)->type;

                // Load up the userdata array
                $userdata = array(
                    'logged_in' => TRUE,
                    'user_id' => $user_id,
                    'username' => $username,
                    'user_email' => $user_email,
                    'user_type' => $user_type
                    );

                // Execute the set_userdata, to our session
                $this->session->set_userdata($userdata);

                $data['main_content'] = "Admin/index";
                $data['title'] = "Administrator";
                $this->load->view('template', $data);
            }
        }
        elseif ($this->session->userdata('logged_in') == TRUE)
        {
            $this->index();
        }
        else
        {
                $data['main_content'] = "user/login";
                $data['title'] = "Login";
                $this->load->view('template', $data);
        }
那么在我看来,

<form action="<?php echo base_url(); ?>user/login" method="POST" id="login_form"/>
<p>Please Login Below</p>
<span class="notice"><?php echo $this->session->flashdata('flashdata'); ?></span>
<span class="label">Username:</span><input type="text" name="username"/><br/>
<span class="label">Password:</span><input type="password" name="password"/><br/>
<input type="submit" name="submit_login" value="Login"/>
</form>
<?php echo $this->session->flashdata('flashdata'); ?>
<br/>
<?php echo $this->session->userdata('userdata'); ?>

codeigniter中的flashdata仅在会话中存在一个附加请求,然后被销毁。如果您无意中试图通过单个请求使用它,那么在您尝试访问它时,它将不存在<代码>用户数据尽管存在,只要会话存在

更新

在查看了更多的代码之后,似乎发生了这种情况,因为您实际上并没有在此处重定向(创建下一个请求),您只是加载了一个视图

        if ($query == FALSE)
        {
            $this->session->set_flashdata('flashdata', 'Incorrect Username or Password doesnt show');
            $this->session->set_userdata('userdata', 'userdata works');
            // Query was wrong, set flash data and redirect to login
            $data['main_content'] = "user/login";
            $data['title'] = "Login";
            $this->load->view('template', $data);  //<---- See?
        }

codeigniter中的
flashdata
仅在会话中存在一个附加请求,然后被销毁。如果您无意中试图通过单个请求使用它,那么在您尝试访问它时,它将不存在<代码>用户数据尽管存在,只要会话存在

更新

在查看了更多的代码之后,似乎发生了这种情况,因为您实际上并没有在此处重定向(创建下一个请求),您只是加载了一个视图

        if ($query == FALSE)
        {
            $this->session->set_flashdata('flashdata', 'Incorrect Username or Password doesnt show');
            $this->session->set_userdata('userdata', 'userdata works');
            // Query was wrong, set flash data and redirect to login
            $data['main_content'] = "user/login";
            $data['title'] = "Login";
            $this->load->view('template', $data);  //<---- See?
        }
价值:

echo $this->session->flashdata('flashdata');
将在第二次刷新页面时获取

实际上,此值存储在cookies中。

以下值:

echo $this->session->flashdata('flashdata');
将在第二次刷新页面时获取


实际上,该值存储在cookies中。

我理解,但它不会在第一次请求时显示。我添加了更多代码。谢谢!成功了!,我知道,我只是加载了一个与请求相同的视图。但是我必须为下一个请求重定向。我理解这一点,但在第一个请求中没有显示。我添加了更多代码。谢谢!成功了!,我知道,我只是加载了一个与请求相同的视图。但我必须重定向到下一个请求。