这是我在方法中的代码:
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/test2
,var_dump(...)
部分将会运行并打印" abc"对我来说细节。
但刷新页面时,它会显示404 error page
因为flashdata不再存在,即使我使用keep_flashdata
。
答案 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();
}