【发布时间】:2016-12-18 02:12:44
【问题描述】:
我正在使用 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');
}
在我的另一个控制器中,称为“类”,我有以下代码...
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 错误 严重性:通知消息:未定义 属性:Classes::$session 文件名:controllers/Classes.php 行 编号:12 回溯:文件: 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 错误 严重性:错误消息:调用 空文件名上的成员函数 userdata():controllers/Classes.php 行号:12 回溯:
为什么构造函数会导致错误?最终,我想将“已登录”检查添加到类构造函数中,这样我就不必将其添加到每个方法中,从而保护整个类。
【问题讨论】:
-
我不知道我是否在这里,我以前从未使用过 CI,但我认为您需要在子类中调用
parent::__construct()。扩展类时不会隐式调用父构造,需要显式调用它们。哎呀,我是对的,见here。 -
最好像
$this->session->userdata('login_in') == TRUE这样检查会话并手动加载会话库并检查是否工作。 -
@Andrew,绝对正确,我会接受你的回答,谢谢!
标签: php codeigniter session