我在我的一个控制器中有这个私有会话,用于检查用户是否已登录:
function _is_logged_in() {
$user = $this->session->userdata('user_data');
if (!isset($user)) {
return false;
}
else {
return true;
}
}
问题是我有多个控制器。如何在其他控制器中使用此功能?重新定义每个Controller中的功能不是很“干”。
有什么想法吗?
答案 0 :(得分:54)
另一个选择是创建一个基本控制器。将函数放在基本控制器中,然后继承该函数。
要在CodeIgniter中实现此目的,请在应用程序的libraries文件夹中创建一个名为MY_Controller.php的文件。
class MY_Controller extends Controller
{
public function __construct()
{
parent::__construct();
}
public function is_logged_in()
{
$user = $this->session->userdata('user_data');
return isset($user);
}
}
然后让你的控制器从这个基本控制器继承。
class X extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
public function do_something()
{
if ($this->is_logged_in())
{
// User is logged in. Do something.
}
}
}
答案 1 :(得分:36)
把它放在帮助器中并自动加载它。
助手/ login_helper.php:
function is_logged_in() {
// Get current CodeIgniter instance
$CI =& get_instance();
// We need to use $CI->session instead of $this->session
$user = $CI->session->userdata('user_data');
if (!isset($user)) { return false; } else { return true; }
}
配置/ autoload.php:
$autoload['helper'] = array('login');
然后在您的控制器中,您可以致电:
is_logged_in();
答案 2 :(得分:6)
您可以使用helper和CodeIgniter构造函数来实现此目的。
您可以在编写函数
时创建自定义助手my_helper.phpfunction is_logged_in() {
$user = $this->session->userdata('user_data');
if (!isset($user)) {
return false;
}
else {
return true;
}
}
在控制器中,如果是login.php
class Login extends CI_Controller {
public function __construct()
{
parent::__construct();
if(!is_logged_in()) // if you add in constructor no need write each function in above controller.
{
//redirect you login view
}
}
答案 3 :(得分:3)
从会话中获取所有用户的数据。
在控制器中,
$userData = $this->session->all_userdata();
在查看,
中print_r($userData);
答案 4 :(得分:2)
我认为使用钩子很容易。只需创建一个钩子来检查$this->session->user
。它将在每个请求中被调用。
答案 5 :(得分:1)
只需在函数__construct()的文件夹核心文件ci_controller上添加它,以检查所有controller():
UNION
答案 6 :(得分:1)
我根据上述答案进行了这样的编码。 创建文件my_helper.php
<?php
function _is_logged_in() {
if(isset($_SESSION['username'])){
return true;
} else {
return false;
}
}
?>
在autoload.php文件中编辑
$autoload['helper'] = array('my');
在您的控制器文件中
class Welcome extends CI_Controller {
public function __construct(){
parent::__construct();
if(!_is_logged_in())
{
redirect("Login");
}
}
}