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

时间:2011-08-10 15:47:29

标签: php session codeigniter

我有一个用户控制器,用于检查登录用户。它有这段代码。我可以设置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'); ?>

为什么flashdata不显示?

2 个答案:

答案 0 :(得分:2)

codeigniter中的

flashdata仅存在于一个额外请求的会话中,然后被销毁。如果您无意中尝试通过单个请求使用它,则在您尝试访问它时它将不存在。只要会话存在,userdata就会存在。

更新

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

        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?
        }

而是这样做......

        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
            redirect("uri/path/to/login");
        }

答案 1 :(得分:1)

值:

echo $this->session->flashdata('flashdata');

将进行第二次刷新页面。

实际上,这个值存储在cookie中。