set_flashdata 在仅使用一个重定向的重定向后不能直接工作。
我在此过程中使用了一个 Controller - Profiler 的 Controller 。它处理成员确认过程,并在重定向时显示登录页面。过程如下:
本次session set_flashdata('topic', 'newmember')
重定向('登录')
route ['login'] = 'profilers/signIn'
topic = $this session flashdata ('topic')
我已经关闭了所有数据库 session 配置以进行更清晰的调试,即使在配置中打开了 session 库,我还是开始调用它,但似乎也不起作用。
这是我的代码。如您所见,我将路径信息发送到日志文件 path.log:
在 Controller 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,登录功能如上所示:
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;
...
...
}
日志文件显示主题已设置但为假。
“flash var 主题是假的”
"主题已设置。topic = "
当然没有设置主题变量,因为它是 FALSE。
如您所见,我已将获取闪存数据功能移至我的 Controller 功能的开头,以绕过任何可能损坏数据的内容。
最佳答案
销毁 session 后,您可能需要重新启动它。
尝试在调用 sess_destory()
后添加:
$this->session->sess_create()
或者,您可以避免破坏 session ,unset()
您希望删除的值。
关于CodeIgniter,set_flashdata 在重定向后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178802/