Codeigniter - 设置flashdata的问题

时间:2017-02-01 09:14:29

标签: php codeigniter session

这是我在方法中的代码:

public function index() {
    $pathToFile = $this->session->flashdata( 'img_path' );
    if ( $pathToFile ) {
        $this->session->set_flashdata( 'file' , $pathToFile );
        $this->session->set_flashdata( 'img_path' , $pathToFile );

        $data[ 'pageTitle' ] = BLOGER_TITLE . ' دانلود تصاویر';
        $data[ 'is_logedin' ] = $this->is_logedin();
        $data[ 'banners' ] = $this->_getBanners( 'side' );
        $data[ 'img_name' ] = basename( $pathToFile );
        $this->load->view( 'download_image' , $data );
    } else {
        show_404();
    }
}

假设用户无法访问此方法,除非访问了另一种方法并在其中设置了名为img_path的flashdata,然后重定向到此方法。 到目前为止,此方法按预期工作完美,但如果用户在页面上刷新,则应显示错误404页面。我想在用户刷新当前页面时保持flashdata活着,所以我应该在索引方法(或构造函数,我尝试过两者)中添加$this->session->keep_flashdata('img_path');这样做,或者我应该添加另一个$this->session->set_flashdata('img_path',$pathToFile);但两者都要解决方案对我有用。为什么? 为了测试我在方法的最后放了一个var_dump($this->session->flashdata('img_path'));。重定向到这个方法之后,我有了img_path,但是在刷新之后它没有这个值,所以我尝试在方法中设置flashdata我,我将拥有它,刷新页面后它将设置为null。以及名为file的其他flashdata永远不会获得分配给它的值。为什么会这样?

我的会话配置如下所示,我在autoload.php中加载了会话库,它在其他控制器和页面中工作正常。

$config['sess_expiration'] = 0;
$config['sess_save_path'] = APPPATH . 'cache/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

-------------------------------

更新

-------------------------------

代码简单:

public function test1() {
    $this->session->set_flashdata( 'img_path',"abc" );
    redirect('imgs/test2','refresh');
}

public function test2() {

    $this->session->keep_flashdata( 'img_path' );
    $pathToFile = $this->session->flashdata( 'img_path' );
    if ( $pathToFile ) {
        $this->session->set_flashdata( 'file' , $pathToFile );
        $this->session->set_flashdata( 'img_path' , $pathToFile );

        var_dump($pathToFile);
    } else {
        show_404();
    }
}

当我转到localhost/imgs/test1时,它会设置flashdata并将我重定向到localhost/imgs/test2var_dump(...)部分将会运行并打印" abc"对我来说细节。 但刷新页面时,它会显示404 error page因为flashdata不再存在,即使我使用keep_flashdata

1 个答案:

答案 0 :(得分:0)

它应该与keep_flash数据一起使用。例如:

    public function test() {
      //From this request session will be set
        $this->session->set_flashdata( 'img_path',"abc" );
        redirect(base_url()."home/test");
    }

    public function index() {
    $this->session->keep_flashdata('img_path');
    $pathToFile = $this->session->flashdata( 'img_path' );
    if ( $pathToFile ) {
         $this->session->set_flashdata( 'file' , $pathToFile );
         $this->session->set_flashdata( 'img_path' , $pathToFile );

         $data[ 'pageTitle' ] = BLOGER_TITLE . ' دانلود تصاویر';
         $data[ 'is_logedin' ] = $this->is_logedin();
         $data[ 'banners' ] = $this->_getBanners( 'side' );
         $data[ 'img_name' ] = basename( $pathToFile );
         $this->load->view( 'download_image' , $data );
    } else {
        show_404();
    }