php - 我应该使用哪个函数代替 codeignitor 中的 redirect()?
问题描述
我希望用户不要通过 URL 跳转到我的欢迎页面。我在构造函数中添加了会话用户数据,但重定向不起作用,显示“ERR_TOO_MANY_REDIRECTS”..所以我也使用 header() 和 site_url 和 base_url 但这些都不起作用......
class Admin extends MY_Controller
{
public function __construct()
{
parent::__construct();
if (!$this->session->userdata('userId'))
return redirect('admin/index');
}
public function index()
{
$this->form_validation->set_rules('username', 'Username', 'required|alpha');
$this->form_validation->set_rules('pass', 'password', 'required|max_length[12]');
$this->form_validation->set_error_delimiters("<div class='text-danger'>","</div>");
if($this->form_validation->run())
{
$user=$this->input->post('username');
$pass=$this->input->post('pass');
$this->load->model('loginmodel');
$id=$this->loginmodel->isvalidate($user,$pass);
if($id)
{
$this->load->library('session');
$this->session->set_userdata('userId',$id);
return redirect('admin/welcome');
}
else
{
$this->session->set_flashdata('loginFailed','Invalid Username/password');
return redirect('admin/login');
}
}
else
{
$this->load->view('admin/login');
}
}
}
?>
解决方案
构造函数允许您在创建对象时初始化对象的属性。如果你创建了一个 __construct() 函数,当你从一个类创建一个对象时,PHP 会自动调用这个函数。(来源)
在您的代码中,管理员重定向到管理员(当管理员初始化时,__construct()
运行会导致再次重定向到管理员。)
我的建议:从索引方法检查会话
public function index(){
if(!$this->session->userdata('userId')){
//code
}else{
$this->load->view('admin/login');
}
}
编辑:感谢 TimBrownlaw
您可以重定向到另一个控制器。
redirect('accounts/admin_login');
class Accounts extends MY_Controller {
public function admin_login(){
if($this->session->userdata('userId')){
redirect('admin/index');
}else{
$this->load->view('admin/login');
}
}
}