如何在用户登录时更改内容?我的意思是启用投票,将“登录”更改为“注销”等。 我认为要做的是在用户登录时启动会话(我更喜欢仅在用户登录时启动会话,而不是所有时间)。然后将数据添加到会话的cookie中,如 -
//controller
$moredata = array(
'username' => $this->username,
'login' => TRUE
);
$this->session->set_userdata($modedata);
//redirect
然后在另一个控制器中,他被重定向,我检查以下内容 -
$login = $this->session->userdata('login');
if ($login==TRUE)
根据'if'条件,我将一个变量传递给视图,在该变量的帮助下,我只转发应该向登录用户显示的div / sections。 问题是,在执行上述比较时,Codeigniter显示以下错误(请记住我还没有在autoload数组中添加'session')
Message: Undefined property: NameOfController::$session
如果我在自动加载文件中设置了以下内容
$autoload['libraries'] = array('session');
然后“if($ login == TRUE)”比较总是显示FALSE。 我该怎么办?
答案 0 :(得分:2)
如果我是你,我会将所有会话检查放在一个基本控制器中,所有其他主控制器都会扩展。这样您就可以keep things DRY:
class BaseController extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function isLoggedIn()
{
// Will return true or false
return $this->session->userdata('login');
}
}
在您的一个功能控制器中(以下示例处理用户):
class UserController extends BaseController {
public function __construct()
{
parent::__construct();
}
public function profile()
{
// Redirect if not logged in
if (!$this->isLoggedIn()) {
$this->redirect('some/other/page')
}
}
public function register()
{
// Show different HTML if not logged in
$data = array(
'isLoggedIn' => $this->isLoggedIn()
);
$this->load->view('register', $data);
}
}
UserController中的第二种方法允许您在视图中呈现不同的内容:
<? if ($isLoggedIn): ?>
<p>You're logged in!</p>
<? else: ?>
<p>Not logged in</p>
<? endif; ?>
答案 1 :(得分:0)
在我的上一个项目中,我们创建了一个简单的权限助手,它具有检查登录状态和权限级别的功能。然后我们只需要从系统中的任何位置根据需要调用辅助函数。如果用户已登录并拥有该内容的权限,则他们会获取内容 - 否则我们会将其重定向到注册或其他错误页面。由于所有逻辑都在辅助函数中,我们可以在if(is_logged_in()){code requiring login to access}
这样的快速权限调用中包装任何需要许可的代码。