【问题标题】:Flashdata is not cleared after a redirect in CodeIgniter 3在 CodeIgniter 3 中重定向后 Flashdata 未清除
【发布时间】:2022-01-24 03:56:32
【问题描述】:

我正在使用 CodeIgniter 3,即使在重定向之后,我在该项目上设置的 flashdata 也不会被清除。刷新页面或再次访问页面后仍然显示。我该如何解决这个问题?

控制器中的一个函数。

public function updateDonor($donor)
    {

        $birthDate = $this->input->post('donordob');
        $currentDate = date("Y-m-d");
        $age = date_diff(date_create($birthDate), date_create($currentDate));

        $this->form_validation->set_rules('donorname', 'Donor Name', 'required');
        $this->form_validation->set_rules('donornic', 'Donor NIC', 'required');
        $this->form_validation->set_rules('donordob', 'Donor DOB', 'required');
        $this->form_validation->set_rules('donorweight', 'Donor Weight', 'required');
        $this->form_validation->set_rules('donormobile', 'Donor Mobile', 'required');

        if ($this->form_validation->run()) {
            $data = [
                'DonorName' => $this->input->post('donorname'),
                'DonorNIC' => $this->input->post('donornic'),
                'DonorDOB' => $this->input->post('donordob'),
                'DonorAge' => $age->format("%y"),
                'DonorWeight' => $this->input->post('donorweight'),
                'DonorMobile' => $this->input->post('donormobile'),
            ];
            $this->load->model('Donor_Model');
            $data['donor'] = $this->Donor_Model->updateDonor($data, $donor);
            $this->session->set_flashdata('donorupdated', 'Donor detailed updated successfully!');
            redirect(base_url('index.php/staff/viewdonors'));
        } else {
            $this->editDonors($donor);
        }


    }

视图中的代码

<?php if ($this->session->flashdata('donorupdated')) { ?>
    <script>
        alertify.set('notifier', 'position', 'top-right');
        alertify.success("<?php echo $this->session->flashdata('donorupdated'); ?>")
    </script>

<?php } ?>

【问题讨论】:

    标签: php codeigniter codeigniter-3 codeigniter-flashdata


    【解决方案1】:

    只需在&lt;script&gt; 标记后添加unset($_SESSION['donorupdated']);,如下所示

    <?php if ($this->session->flashdata('donorupdated')) { ?>
        <script>
            alertify.set('notifier', 'position', 'top-right');
            alertify.success("<?php echo $this->session->flashdata('donorupdated'); ?>")
        </script>
        <?php unset($_SESSION['donorupdated']); ?>
    
    <?php } ?>
    

    【讨论】:

      【解决方案2】:

      如果您不这样做,请按照以下步骤操作。

      CREATE TABLE IF NOT EXISTS `ci_sessions` (
          `id` varchar(128) NOT NULL,
          `ip_address` varchar(45) NOT NULL,
          `timestamp` int(10) unsigned NOT NULL DEFAULT 0,
          `data` blob NOT NULL,
          KEY `ci_sessions_timestamp` (`timestamp`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      

      然后在autoload.php 添加$autoload['libraries'] = array('session');

      请查看Session Library

      然后在config.php里面。

      $config['sess_driver'] = 'database';
      $config['sess_cookie_name'] = 'ci_session';
      $config['sess_expiration'] = 7200
      $config['sess_save_path'] = 'ci_sessions';
      $config['sess_match_ip'] = TRUE;
      $config['sess_time_to_update'] = 300;
      $config['sess_regenerate_destroy'] = TRUE;
      

      查看代码

      <?php if($this->session->flashdata('donorupdated')) { ?>
          echo $this->session->flashdata('donorupdated');
      <?php } ?>
      

      【讨论】:

      • 谢谢@Amit 你能解释一下我应该在哪里写create table 代码。我应该在数据库中创建一个新表吗?
      • 是的。您必须在 MySQL 数据库中创建名为 ci_sessions 的表。
      • 我试过这个解决方案,但是重定向后 flashdata 仍然没有清除。
      • 您可以通过以下方式解决您的问题。 session->flashdata('donorupdated')) { ?> echo $this->session->flashdata('donorupdated');未设置($_SESSION['donorupdated']);
      猜你喜欢
      • 2013-09-21
      • 2016-03-03
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      相关资源
      最近更新 更多