有没有办法确保只有成员才能访问成员控制器?
目前,即使没有他们登录,人们也只需输入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");
}
}
我希望这能澄清我的问题
答案 0 :(得分:2)
在您的情况下,我建议您使用闪存数据。将存储在会话中,但仅适用于下一页加载。
控制器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");
}
}
然后,您还可以使用上面的闪存数据代码将错误消息传回公共控制器。
答案 1 :(得分:0)
如果我理解你的问题,要重定向到另一个控制器,你可以使用方法
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');