首页 > 解决方案 > 无法将 flashdata 或 userdata 值传递给另一个函数

问题描述

我试图在同一个控制器中将 flashdata 和 userdata 的值从一个函数获取到另一个函数。似乎我在 func A 中使用重定向到 func B。所以当 func 加载时,它不会读取值并变为 Null。我使用了 var_dump() 和 print_r 但值为空。请找到我的示例代码如下: -

控制器:Sample.php

我已经在开始时声明了会话库

$this->load->library('session');

尝试使用时$this->session->userdata

public function A {

 $city = $this->input->post('Ucity');
 $depart = $this->input->post('Udepartment');

 $this->session->set_userdata('City',$city);
 $this->session->set_userdata('Department',$depart);

 //I guess the issue is coming overhere. When it redirects, it loses its values      
 redirect ('/Sample/B/');

}


public function B {

$getCity = $this->session->userdata('City');
$getDept = $this->session->userdata('Department');

  if(isset($getCity)) {
   $data['ct'] = $getCity;   
   $data['dt'] = $getDept;     

     $this->load->view(header);
     $this->load->view(menu);
     $this->load->view(fetchEmp, $data);
     $this->load->view(footer);

  }
    else {
    var_dump($getCity);
    print_r($getCity);
  }
}

尝试使用时$this->session->flashdata

public function A {

 $city = $this->input->post('Ucity');
 $depart = $this->input->post('Udepartment');

 $this->session->set_flashdata('City',$city);
 $this->session->set_flashdata('Department',$depart);

 $this->session->keep_flashdata('City');
 $this->session->keep_flashdata('Department');

 //I guess the issue is coming overhere. When it redirects, it loses its values    
 redirect ('/Sample/B/');

}


public function B {

$getCity = $this->session->flashdata('City');
$getDept = $this->session->flashdata('Department');

  if(isset($getCity)) {
   $data['ct'] = $getCity;   
   $data['dt'] = $getDept;     

     $this->load->view(header);
     $this->load->view(menu);
     $this->load->view(fetchEmp, $data);
     $this->load->view(footer);

  }

}

还有我的 fetchEmp.php(查看)

<h1>City: <?php echo $ct .'and department: ' . $dt ?></h1>

我得到的输出是:NULL

标签: codeignitercodeigniter-3codeigniter-2codeigniter-sessioncodeigniter-flashdata

解决方案


这很简单。Flashdata 只会存储您的价值一次。如果刷新页面,它将丢失数据。如果你不打算使用 flashdata,你可以使用它,如果你稍后会使用,那么只需使用 userdata()。

第 1 步:转到第 314 行的 Session.php(在 Systems/Library/Session 中),其中显示:

ini_set('session.use_trans_sid',0);

使用 // 注释此行

现在在同一个文件中转到第 143 行,其中显示:

session_start();

也评论这一行。

现在打开你的控制器文件并在第一行写下这一行:

session_start();

这必须是您的 controller.php 文件中的第一件事。

这个对我有用。


推荐阅读