在我的MY_Controller.php中,如果会话已过期,我会在那里进行重定向。
然后重定向到注销控制器。我在logout控制器中添加了一个if语句agent->is_referral
并设置了flashdata。因为它已从仪表板控制器重定向,所以应该选择if语句并设置flashdata但不是。
问题:如果客户从任何控制器重定向到注销,那么如何让
is_referral()
检测并设置flashdata消息。在is_referral()
if语句内部时,不设置flashdata消息。
控制器>帐户> Logout.php
<?php
class Logout extends MY_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->load->library('user_agent');
if ($this->agent->is_referral()) {
// Does not set the flashdata if redirected from another controller.
$this->session->set_flashdata('warning', 'Your session has expired!');
}
// Flashdata works if have it here.
// $this->session->set_flashdata('warning', 'Your session has expired!');
$this->customer->logout();
redirect('/'); // redirect to login page.
}
}
核心&gt; MY_Controller.php
<?php
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
if ($this->uri->segment(1)) {
if (!$this->session->userdata('customer_id')) {
$route = $this->uri->segment(1) .'/'. $this->uri->segment(2);
if (isset($route)) {
$ignore = array(
'account/logout'
);
if (!in_array($route, $ignore)) {
redirect('account/logout');
}
}
}
}
}
}
控制器&gt;帐户&gt; Dashboard.php
<?php
class Dashboard extends MY_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->load->view('common/header_view');
$this->load->view('account/dashboard_view');
$this->load->view('common/footer_view');
}
}