当用户登录或注册时,他的$_SESSION['username']
获取其用户名的值。我想让他们只有在注册时才能访问某些控制器。但我不喜欢写这个的想法:
function __construct()
{
session_start();
if(empty($_SESSION['username']))
die();
parent::__construct();
}
在每个控制器中我都不希望无人识别的人看到。有没有更好的方法呢?感谢。
答案 0 :(得分:4)
您可以考虑扩展基本控制器类(请参阅the Codeigniter Wiki Article on extending the class)以提供require_login
功能:
class MY_Controller extends CI_Controller {
protected function require_login() {
if(empty($_SESSION['username']))
die();
}
}
完成此操作后,您可以在要保护的每个控制器的构造函数中调用require_login()
:
function __construct() {
$this->require_login();
}
最后,您可以考虑利用Codeigniter $_SESSION
库或an equivalent,而不是使用PHP的session
超全局进行会话存储。
答案 1 :(得分:1)
Codeigniter有own session, not $_SESSION
。
除此之外,如果你有相同类型的控制器,你可以编写一个基本控制器并从中扩展。基本控制器可以包含用于验证控制器是否可访问的代码,并且您不需要在您创建的每个控制器类中编写该代码。请参阅How do I extend the code igniter controller class?。
答案 2 :(得分:1)
function __construct() {
parent::Controller();
$this->authenticate();
}
function authenticate()
{
if (!$this->session->userdata('admin_loggedIn'))
{
redirect('login');
}
}