用户登录时更改内容,即会话开始时

时间:2013-01-26 20:37:31

标签: php codeigniter session login codeigniter-2

如何在用户登录时更改内容?我的意思是启用投票,将“登录”更改为“注销”等。 我认为要做的是在用户登录时启动会话(我更喜欢仅在用户登录时启动会话,而不是所有时间)。然后将数据添加到会话的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。 我该怎么办?

2 个答案:

答案 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}这样的快速权限调用中包装任何需要许可的代码。