【问题标题】:$this->session->set_flashdata() and then $this->session->flashdata() doesn't work in codeigniter$this->session->set_flashdata() 然后 $this->session->flashdata() 在 codeigniter 中不起作用
【发布时间】:2012-10-18 01:16:10
【问题描述】:

请看下面的代码:

$this->session->set_flashdata('message', 'This is a message.');
var_dump($this->session->flashdata('message'));

它返回bool(false)

我希望它不会需要 redirect() 在此之后被召回,因为有时我需要在视图中设置 flashdata 后立即调用它.


编辑venkat的评论之后

$this->session->set_flashdata('message', 'This is a message.');
$this->session->keep_flashdata('message');
var_dump($this->session->flashdata('message'));

遗憾的是没有区别。

【问题讨论】:

  • CodeIgniter 支持“flashdata”,即仅可用于下一个服务器请求的会话数据,然后自动清除。如果您想通过附加请求保留闪存数据,请使用此 $this->session->keep_flashdata('message');如果我错了,请告诉我............
  • 谢谢你亲爱的@Venkat,但没有区别。我更新了我的问题。
  • 可能 flashdata 只能在下一个服务器请求时检索?当然还要确保您使用加密密钥等正确加载了会话。
  • 是的,你是对的。当然,我已经将这些配置设置为使用会话。

标签: codeigniter session


【解决方案1】:

嗯,documentation 确实说明了这一点

CodeIgniter 支持“flashdata”或会话数据 可用于下一个服务器请求,然后自动 清除。

首先,这显然意味着您需要执行新的服务器请求。 重定向、刷新、链接或其他方式将用户发送到下一个请求。

如果您在同一个请求中使用 flashdata,为什么还要使用它呢?您最好不要使用 flashdata 或使用常规会话。

【讨论】:

  • 谢谢你,是的,我在问完我的问题后阅读了文档!!!无论如何希望我可以使用flashdata,因为用于此类目的的真正意思是flashdata,而不是正常会话。另一个原因是现在我必须以更手动的方式使用它,因为我应该考虑在显示消息会话后取消设置它们。
  • 不一定 - 一个选项是 extend CI 使用您自己的会话库,它允许在设置闪存数据后直接访问它。
  • 自动清除?那么不会自动清除的替代方案是什么? @Repox
  • @gumuruh 另一种方法是不使用 flashdata,而只使用会话数据或 cookie。
【解决方案2】:
// Set flash data 
$this->session->set_flashdata('message_name', 'This is my message');
// After that you need to used redirect function instead of load view such as 
redirect("admin/signup");

// Get Flash data on view 
$this->session->flashdata('message_name');

【讨论】:

    【解决方案3】:

    要设置 flashdata,您需要重定向控制器功能

    $this->session->set_flashdata('message_name', 'This is test message');
    
    //redirect to some function
    redirect("controller/function_name");
    
    //echo in view or controller
    $this->session->flashdata('message_name');
    

    【讨论】:

      【解决方案4】:

      在 Codeigniter 中重定向后显示一条 flash 消息

      在你的控制器中设置这个

      <?php
      
      public function change_password(){
      
      
      
      
      
      
      
      if($this->input->post('submit')){
      $change = $this->common_register->change_password();
      
      if($change == true){
      $messge = array('message' => 'Password chnage successfully','class' => 'alert alert-success fade in');
      $this->session->set_flashdata('item', $messge);
      }else{
      $messge = array('message' => 'Wrong password enter','class' => 'alert alert-danger fade in');
      $this->session->set_flashdata('item',$messge );
      }
      $this->session->keep_flashdata('item',$messge);
      
      
      
      redirect('controllername/methodname','refresh');
      }
      
      ?>
      
      In Your View File Set this
      <script type="application/javascript">
      /** After windod Load */
      $(window).bind("load", function() {
        window.setTimeout(function() {
          $(".alert").fadeTo(500, 0).slideUp(500, function(){
              $(this).remove();
          });
      }, 4000);
      });
      </script>
      
      <?php
      
      if($this->session->flashdata('item')) {
      $message = $this->session->flashdata('item');
      ?>
      <div class="<?php echo $message['class'] ?>"><?php echo $message['message']; ?>
      
      </div>
      <?php
      }
      
      ?>
      

      请查看以下链接以获取Displaying a flash message after redirect in Codeigniter

      【讨论】:

        【解决方案5】:

        更改您的 config.php:

        $config['sess_use_database'] = TRUE;
        

        收件人:

        $config['sess_use_database'] = FALSE;
        

        它对我有用。

        【讨论】:

        • 但这在我的 codeigniter 3 配置中不存在。@Crashed
        【解决方案6】:

        重定向后的闪存消息将在控制器中不可见。 在视图中显示获取控制器的操作并将其传递给视图

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-06
          • 1970-01-01
          • 2018-03-11
          • 1970-01-01
          • 1970-01-01
          • 2015-02-28
          • 2021-12-11
          • 1970-01-01
          相关资源
          最近更新 更多