CodeIgniter,重定向后set_flashdata无法正常工作

时间:2013-08-12 02:30:02

标签: codeigniter flash session

只有一次重定向重定向后,

set_flashdata无法直接工作。

我在此过程中使用一个控制器 - Profilers'Controller。它处理成员确认过程,并在重定向上显示登录页面。过程如下:

  1. 此会话set_flashdata('topic','newmember')

  2. 重定向('登录')

  3. route ['login'] ='profilers / signIn'

  4. topic = $ this session flashdata('topic')

  5. 我已关闭所有数据库会话配置以进行更干净的调试,即使会话库中的会话库已打开,我也开始调用它,但这似乎也不起作用。

    这是我的代码。如您所见,我将路径信息发送到日志文件path.log:

    控制器Profilers中的

    ,功能confirmMember:

    public function confirmMember()
      {
        //use_ssl();
        $this->form_validation->set_rules('handle', 'Unique Member Name', 'trim|xss_clean|required|min_length[5]|max_length[30]');
        $this->form_validation->set_rules('confirmation', 'Confirmation Code', 'trim|xss_clean|required|min_length[20]|max_length[20]|alpha_numeric');
    
        if ($this->form_validation->run() === FALSE) {echo "here";exit;
          $data['handle']=$this->input->post('handle');
          $data['confirmation']=$this->input->post('confirmation');
          $this->load->view('signing/defaults/header',$data);
          $this->load->view('defaults/heading',$data);
          $this->load->view('defaults/banner');
          $this->load->view('defaults/banner_right');
          $this->load->view('member/temp/index',$data);
          $this->load->view('defaults/footer',$data);
        } else {
    
          $post = $this->input->post(NULL,TRUE);
          $data['member'] = $this->Signing_model->model_confirmMember($post);
    
      if ($data['member']['confirmed']!==FALSE) {
        /* PATH CHECK */ 
        error_log("member confirmation not false\n",3, LOG_DIR.'path.log');
        unset($post);
        $this->session->sess_destroy();
        $this->session->set_flashdata('topic', 'newmember');
        // $this->session->keep_flashdata('topic');
        redirect('login','refresh');
      } else {
        /* PATH CHECK */ 
        error_log("member confirmation IS FALSE\n",3, LOG_DIR.'path.log');
        $this->load->view('member/temp/index',$data);
      }
    

    我的日志文件显示路径使用正确的路径并显示“成员确认不是假”。

    我已尝试使用keep_flash数据(由于没有其他重定向,我认为这不起作用)并关闭。

    我也试过没有'刷新'的重定向。

    在config / routes.php中:

    <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    $route['join'] = 'profilers/joinUp';
    $route['login'] = 'profilers/signIn';
    ...
    

    登录页面使用Profilers Controller,signIn功能如上图所示:

    public function signIn()
    {
      $topic = $this->session->flashdata('topic');
      if (isset($topic)) {
          $message = "topic is set. topic = ".$topic."\n";
          if ($topic!==FALSE) {
                  error_log("flash var topic is not false\n", 3, LOG_DIR.'path.log');
          } else {
                  error_log("flash var topic is FALSE\n", 3, LOG_DIR.'path.log');
          }
      } else {
          $message = "topic is NOT set\n";
      }
      error_log($message,3,LOG_DIR.'path.log');
    
      exit;
      ...
      ...
    }
    

    日志文件显示主题已设置但为false。

    “flash var topic is FALSE”

    “主题已设置.topic =”

    当然主题var没有设置,因为它是FALSE。

    如您所见,我已将get flash数据功能移至控制器功能的开头,以绕过可能损坏数据的任何内容。

1 个答案:

答案 0 :(得分:8)

您可能需要在销毁会话后再次启动会话。

请在致电sess_destory()后尝试添加此内容:

$this->session->sess_create()

或者你可以避免破坏会话,并unset()你希望摆脱的值。