【问题标题】:Codeigniter - issue in setting flashdataCodeigniter - 设置 flashdata 的问题
【发布时间】:2017-06-17 23:18:38
【问题描述】:

这是我在方法中的代码:

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 a 时,它会设置 flashdata 并将我重定向到 localhost/imgs/test2var_dump(...) 部分将运行并为我详细打印“abc”。 但是刷新页面时,它会显示404 error page,因为flashdata 不再存在,即使我使用了keep_flashdata

【问题讨论】:

  • 您使用 flashdata 的方式并非真正适用。为什么不在会话中设置它,然后在完成后取消设置?
  • 如果用户更改控制器,我希望会话被销毁。我认为这是最好的方法,无需在其他控制器构造函数中进行任何额外编码即可删除会话(如果存在)?

标签: php codeigniter session


【解决方案1】:

它应该适用于 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();
    }

【讨论】:

  • 感谢您的快速回答,但在 test() 函数中我应该重定向到相同的方法还是应该重定向到索引方法?
  • 它不工作。有什么我应该设置的配置吗?就像刷新后flashdata被清除一样。但在刷新之前我有价值
  • 如果您使用$this->session->keep_flashdata('img_path');,则闪存数据不会被擦除。仔细检查您的代码。并检查您是否没有破坏会话数据。
  • 我使用了一种简单的方法并更新了问题。代码在逻辑上是正确的,但仍然没有结果,并且 keep_flashdata() 不起作用。请帮忙...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多