【发布时间】:2014-07-28 16:06:07
【问题描述】:
如何保护控制器中的功能?
假设用户已登录,只需输入 url 即可直接访问任何功能。
有人说使用私有函数.....
有人说在函数中使用下划线前缀
但是没有明确的解释如何做到这一点以及它是如何工作的。
希望你们能说得清楚一点。
谢谢大家。
【问题讨论】:
标签: php codeigniter
如何保护控制器中的功能?
假设用户已登录,只需输入 url 即可直接访问任何功能。
有人说使用私有函数.....
有人说在函数中使用下划线前缀
但是没有明确的解释如何做到这一点以及它是如何工作的。
希望你们能说得清楚一点。
谢谢大家。
【问题讨论】:
标签: php codeigniter
根据 CI 文档的建议,由于检查用户是否登录是您可能希望在许多控制器中执行的常见任务,因此您应该首先创建一个具有检查用户是否登录的方法。像这样:
class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
}
protected function _user_is_logged_in()
{
// logic which checks various conditions and returns a boolean
}
}
然后,您可以在为您的站点声明各种其他控制器时使用此控制器:
class Welcome extends My_Controller
{
public function index()
{
if(!$this->_user_is_logged_in())
{
// redirect, exit, show a 403, etc;
}
}
}
CodeIgniter 框架有一个特性可以防止下划线前缀的方法被用作页面回调:
http://ellislab.com/codeigniter/user-guide/general/controllers.html#private
并且在声明它们时将这些方法定义为private 或protected 显然会分别影响它们的作用域、定义和扩展。
【讨论】:
您可以使用下划线前缀在控制器中创建私有函数。
http://ellislab.com/codeigniter/user-guide/general/controllers.html#private
在某些情况下,您可能希望某些功能对公共访问隐藏。要将函数设为私有,只需添加下划线作为名称前缀,它将不会通过 URL 请求提供。例如,如果你有这样的功能:
private function _utility()
{
// some code
}
像这样尝试通过 URL 访问它是行不通的:
example.com/index.php/blog/_utility/
【讨论】: