codeigniter - 重定向后会话闪存数据不保留
问题描述
在 Codeigniter 中重定向后,我的闪存数据消息未通过。我有一个用户控制器:
class User extends CI_Controller {
public function register(){
$data['title']='Register Here';
$this->form_validation->set_rules('name' , 'Name' , 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('user_name' , 'Username' , 'trim|required|max_length[32]|callback_check_username_exists'); // or is_unique[users.username]
$this->form_validation->set_rules('password', 'Password','trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('confirm_password', 'Confirm Password','trim|required|min_length[5]|max_length[12]|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[users.email]', array('is_unique'=>'Email Already Used'));
if ($this->form_validation->run()==FALSE){
$this->load->view('templates/header');
$this->load->view('users/register',$data);
$this->load->view('templates/footer');
} else {
$option=array('cost'=>12);
$encrypt_password=password_hash($this->input->post('password'),PASSWORD_BCRYPT,$option);
$this->user_model->add_user($encrypt_password);
$this->session->set_flashdata('user_registered','You are Successfully Registered and Logged In');
// This works print_r($this->session->flashdata('user_registered'));
redirect('posts');
}
}
在用户控制器 flashdata 'user_registered' 被存储时,我在上面的评论中回显它。
我的 POST 控制器是:
class Posts extends CI_Controller {
public function index(){
$data['title']='Latest Posts';
$posts=$this->post_model->get_post();
$data['posts']=$posts;
$this->load->view('templates/header');
$this->load->view('posts/index',$data);
$this->load->view('templates/footer');
}
我的标题视图是:
<html>
<head>
<title>My Blog </title>
<link rel="stylesheet" href="<?php echo base_url();?>asset/css/bootstrap.min.css">
<link rel="stylesheet" href="<?php echo base_url();?>asset/css/style.css">
<script src="https://cdn.ckeditor.com/4.11.1/standard/ckeditor.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="<?php echo base_url();?>">Bloggy</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarColor02">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="<?php echo base_url();?>">Home </a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo base_url();?>posts">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo base_url();?>category">Categories</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo base_url();?>about">About</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="nav-item">
<a class="nav-link" href="<?php echo base_url();?>user/register">Register</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo base_url();?>posts/create">Create Post</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo base_url();?>category/create">Create Category</a>
</li>
</ul>
</div>
</nav>
<div class="container">
<!-- Flash Data -->
<?php if($this->session->flashdata('user_registered')): ?>
<?php echo $this->session->flashdata('user_registered');?>
<?php else :?>
<?php echo ' no value '; ?>
<?php /*echo '<p class="alert alert-success">'.$this->session->flashdata('user_registered').'</p>'; */?>
<?php endif; ?>
在标题视图中,flashdata user_registered 显示没有任何值。只有一个重定向,我应该能够访问闪存数据。
在进一步调查中,我发现我的会话根本不起作用。我已经自动加载了会话库,在浏览器中我看到 ci_session 作为 cookie,但我测试了用户数据和 flashdata 在重定向后都不起作用。Flash 数据应该在一次重定向后工作,因为我已经这样做了很长时间。我以前完美运行的应用程序也失败了,因为会话没有被存储。
我创建了如下测试代码:
class User extends CI_Controller {
public function index (){
$sex='M';
$data1['user']=$this->user_model->get_all_users($sex);
$this->session->set_userdata('test','data');
$this->session->set_flashdata('flash', 'data');
print_r($_SESSION); exit();
redirect('projects');
}
我得到 Array ( [__ci_last_regenerate] => 1547034241 [test] => data [flash] => data [__ci_vars] => Array ( [flash] => new ) ) 。
现在我在我的项目控制器中回显会话:
<?php
class Projects extends CI_Controller {
public function index()
{
print_r($_SESSION); exit();
$result= $this->project->get_projects();
$data['result']=$result ;
$this->load->view('pages/projects',$data);
}
}
我刚得到这个:数组([__ci_last_regenerate] => 1547034384)。
My config.php is $config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
解决方案
闪存数据是仅在页面上可用的会话..当它在服务器上获得新请求时,它会清空闪存数据...即您的重定向取消设置闪存数据...设置 user_data 以获取您的消息...并在您取消设置时喜欢
$this->session->userdata('user_registered','You are Successfully Registered and Logged In');
在视图中取消设置
<?php
if($this->session->userdata('user_registered')){
echo $this->session->userdata('user_registered');
$this->session->unset_userdata('user_registered');
}
?>