我正在使用autolload .php自动加载'session库'。
我在我的Users/Login
方法中使用以下代码在控制器中设置我的用户数据。
$teacher_data = [
'teacher_id' => $user_id,
'username' => $username,
'logged_in' => true
];
$this->session->set_userdata($teacher_data);
现在我只想检查一个用户是否登录了我的限制页面,使用以下命令…
if (!$this->session->userdata('login_in')) {
redirect('home/login');
}
在我的另一个控制器,称为"类"我有以下代码…
class Classes extends CI_Controller
{
public function create()
{
if (!$this->session->userdata('login_in')) {
echo 'not logged in';
}
}
}
代码重定向用户回到登录,如果他们没有权限查看页面,伟大的…然而,当我添加一个构造函数…即使是这样一个空的…
class Classes extends CI_Controller
{
public function __construct()
{
}
public function create()
{
if (!$this->session->userdata('login_in')) {
echo 'not logged in';
}
}
}
我得到一个致命错误:
遇到PHP错误严重性:Notice Message: Undefined属性:Classes: $session文件名:controllers/Classes.php编号:12回溯:文件:C:'xampp'htdocs'php'toucan_app'App'controllers'Classes.php函数:_error_handler文件:C:'xampp'htdocs'php'toucan_app'index.php Line: 315require_once致命错误:在null上调用成员函数userdata()C:'xampp'htdocs'php'toucan_app'App'controllers'Classes.php12遇到PHP错误严重性:错误消息:调用成员函数userdata()为空文件名:controllers/Classes.phpBacktrace:
为什么构造函数会导致错误?最后,我想将'is logged in'检查添加到类构造函数中,这样我就不必将其添加到每个方法中,从而保护整个类。
当子类有自己的__construct
方法时,父类__constructs
不会被隐式调用。
您需要在子类的构造中调用parent::__construct()
以使其正常工作。
请参阅此处查看与CodeIgniter的Controller构造相关的代码。
您可以在会话变量中设置数据:
$teacher_data = array(
'teacher_id' => $user_id,
'username' => $username,
'logged_in' => true
);
$this->session->set_userdata($teacher_data);
登录后可以检查登录变量:
class Classes extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function create()
{
if (!$this->session->userdata('logged_in')) {
echo 'not logged in';
}
}
}