0

用户登录时如何更改其内容?我的意思是启用投票,将“登录”更改为“注销”等。我认为要做的是在用户登录时启动会话(我更喜欢仅在用户登录时启动会话,而不是一直)。然后将数据添加到会话的 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 显示以下错误(记住我还没有在自动加载数组中添加“会话”)

Message: Undefined property: NameOfController::$session

如果我在自动加载文件中设置以下

$autoload['libraries'] = array('session');

那么“if ($login==TRUE)”比较总是显示为 FALSE。我该怎么办?

4

2 回答 2

2

如果我是你,我会把你所有的会话检查放在一个基本控制器中,你的所有其他主控制器都扩展了它。这使您可以保持干燥

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; ?>
于 2013-01-26T21:46:33.313 回答
0

在我的上一个项目中,我们创建了一个简单的权限助手,它具有检查登录状态和权限级别的功能。然后,我们只需根据需要从系统中的任何位置调用辅助函数。如果用户已登录并拥有该内容的权限,那么他们将获得该内容 - 否则我们会将他们重定向到注册页面或其他错误页面。由于所有这些逻辑都在辅助函数中,我们可以将任何需要权限的代码包装在快速权限调用中,例如if(is_logged_in()){code requiring login to access}.

于 2013-01-28T01:30:10.637 回答