有没有办法确保只有成员才能访问成员控制器?
目前,即使没有他们登录,人们也只需要输入 mywebsite.com/member 即可进入。
这是我的主控制器代码:
public function members(){
if ($this->session->userdata('is_logged_in')){
redirect('member');
} else {
redirect('main/restricted');
}
}
这是我的成员控制器代码:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Member extends CI_Controller {
public function index() {
$this->load->view("site_header");
$this->load->view("member");
$this->load->view("site_nav");
$this->load->view("site_footer");
}
}
我希望这能澄清我的问题
在您的情况下,我建议您使用闪存数据。将存储在会话中,但仅适用于下一个页面加载。
控制器 1:
$data = "your data or array";
$this->session->set_flashdata('key',$data);
redirect('controller2/method');
控制器 2:
$data = $this->session->flashdata('key');
如果您需要使其可用于其他页面加载:
$this->session->keep_flashdata('key');
要保护成员控制器,您可以简单地执行以下操作:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Member extends CI_Controller {
public function __construct(){
parent::__construct();
if (! $this->session->userdata('is_logged_in')){
redirect('main/restricted');
}
}
public function index() {
$this->load->view("site_header");
$this->load->view("member");
$this->load->view("site_nav");
$this->load->view("site_footer");
}
}
然后,您还可以使用上面的闪存数据代码将错误消息传递回公共控制器。
如果我
正确理解您的问题,要重定向到另一个控制器,您可以使用该方法
redirect('/controller/method');
如果需要访问会话变量,则首先必须在第一个控制器中设置数据
$this->load->library('session');
$this->session->set_userdata(array(
'new_var' => 'data value',
));
并从其他控制者(成员)检索
$this->load->library('session');
$new_var = $this->session->userdata('new_var');