我使用autoload.php自动加载'会话库'。
我使用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');
}
在我的另一个名为'Classes'的控制器中,我有以下代码......
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错误严重性:通知消息:未定义 property:Classes :: $ session文件名:controllers / Classes.php Line 数量:12 Backtrace:文件: C:\ xampp \ htdocs \ php \ toucan_app \ App \ controllers \ Classes.php行:12 功能:_error_handler文件: C:\ xampp \ htdocs \ php \ toucan_app \ index.php行:315功能: require_once致命错误:在null上调用成员函数userdata() 在C:\ xampp \ htdocs \ php \ toucan_app \ App \ controllers \ Classes.php上线 12遇到PHP错误严重性:错误消息:调用a 成员函数userdata()on null文件名:controllers / Classes.php 行号:12 Backtrace:
为什么构造函数会导致错误?最后,我想将“登录”检查添加到类构造函数中,这样我就不必将它添加到每个单独的方法中,从而保护整个类。
答案 0 :(得分:1)
如果子类具有__constructs
方法,则不会隐式调用父__construct
。
您需要在子类的构造中调用parent::__construct()
才能使其正常工作。
请参阅here以获取与CodeIgniter的Controller构造相关的代码。
答案 1 :(得分:1)
您可以在会话变量中更改设置数据中的代码:
$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';
}
}
}