【问题标题】:Setting Flash Data When Session Expire Codeigniter会话过期时设置 Flash 数据 Codeigniter
【发布时间】:2014-07-02 05:53:44
【问题描述】:

当会话超时然后能够在登录页面上获取消息时,设置闪存数据消息的最佳方法是什么。

我有一个想要使用的警告变量,但似乎无法让它与会话一起工作超时我让它重定向到登录页面一个会话超时。

但不确定使用我的错误数组设置闪存数据的最佳方法,任何想法。

登录控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login extends MX_Controller {

   private $error = array();

   public function __construct() {
      parent::__construct();
      $this->load->library('user');
      $this->load->library('form_validation');
      $this->lang->load('common/login', 'english');
   } 

   public function index() {
      $this->form_validation->set_rules('username', 'Username', 'required|min_length[4]|max_length[12]');
      $this->form_validation->set_rules('password', 'Password', 'required|xss_clean');

      if($this->form_validation->run($this) == false) {

         $data['title'] = $this->lang->line('heading_title');

         $data['text_heading'] = $this->lang->line('text_heading');

         if (array_key_exists('warning', $this->error)) {
            $data['error_warning'] = $this->error['warning'];
         } else {
            $data['error_warning'] = '';
         }

         if (null !==($this->session->flashdata('message_name'), $this->error)) {
            $data['message'] = $this->session->set_flashdata('message_name', 'This is my message');
         } else {
            $data['message'] = '';
         }

         $this->load->view('common/login', $data);

      } else{ 

         if($this->validate()) {

             redirect('dashboard');

            } else {

               $data['title'] = $this->lang->line('heading_title');

               $data['text_heading'] = $this->lang->line('text_heading');

               if (array_key_exists('warning', $this->error)) {
                  $data['error_warning'] = $this->error['warning'];
               } else {
                  $data['error_warning'] = '';
               }

               if (null !==($this->session->flashdata('message_name'), $this->error)) {
                  $data['message'] = $this->session->set_flashdata('message_name', 'This is my message');
               } else {
                  $data['message'] = '';
               }

               $this->load->view('common/login', $data);

         }
      }
   }

   function validate() {
      $username = $this->input->post('username');
      $password = $this->input->post('password');

      if ($this->user->login($username, $password)) {
          return true;
      } else {
         $this->error['warning'] = $this->lang->line('error_login');
         return !$this->error;
      }
   }
}

登录查看

<?php echo modules::run('common/header/index');?>

<div class="container">
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-4 col-md-offset-4 col-sm-offset-2 col-sm-8">
<div class="panel panel-default">
<div class="panel-heading"><h2 class="panel-title"><i class="fa fa-key"></i> <?php echo $text_heading; ?></h2></div>
<div class="panel-body">

<?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
        <button type="button" class="close" data-dismiss="alert">&times;</button>
    </div>
<?php } ?>

<?php echo form_open('login');?>

<div class="form-group">
    <div class="input-group"><span class="input-group-addon"><i class="fa fa-user"></i> </span>
    <input type="text" name="username" value="" placeholder="Username"  class="form-control" size="50" />
    </div>
    <?php echo form_error('username', '<div class="text-danger">', '</div>'); ?>
</div>

<div class="form-group">
    <div class="input-group"><span class="input-group-addon"><i class="fa fa-lock"></i></span>
        <input type="password" name="password" value="" placeholder="Password"  class="form-control"/>
        </div>
        <?php echo form_error('password', '<div class="text-danger">', '</div>'); ?>
    </div>
<div class="form-group">
    <div class="text-right">
        <button type="submit" class="btn btn-primary"><i class="fa fa-key"></i> Login</button>
    </div>
</div>

</form>

</div><!--/. Panel Body -->
</div><!--/. Panel Panel Default -->
</div>
</div>
</div>
<?php echo modules::run('common/footer/index');?>

【问题讨论】:

    标签: php codeigniter flash session


    【解决方案1】:

    set_flshdat 是 codeigniter 函数,仅适用于下一个服务器请求,然后自动清除。您可以在这里查看详细信息flashdata 并在此链接中搜索 set_flashdata

    所以如果您在重定向到其他页面或同一页面后需要消息

    在第一个请求的控制器页面上设置 flashdata

    $this->session->set_flashdata('message_name', 'This is my message');
    

    在第二个服务器请求或您的重定向页面将使用以下方法获取此闪存数据

    echo $this->session->flashdata('message_name');
    

    所以,基本上如果你不想重定向页面并想加载视图

    //set data in controller 
    $data['message_name'] = 'This is my message'
    //and pass this to view
    $this->load->view('yourview_name', $data);
    

    然后在你的视图页面中写

    echo $message_name;
    

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2023-03-17
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多