【问题标题】:Session handling in CodeIgniterCodeIgniter 中的会话处理
【发布时间】:2013-03-07 15:52:12
【问题描述】:

如何在 CodeIgniter 中登录应用程序的多用户(管理员、用户)中维护会话(设置会话 ID、获取会话 ID)?

我正在使用这个if($this->session->userdata('logged_in') == '')。但这不起作用。

谢谢

【问题讨论】:

  • 你是如何使用的?你能更清楚你的原始代码吗?
  • 你可以试试 if($this->session->userdata('logged_in'))。
  • 我有两种类型的用户。 1.管理员 2.用户。如果我以用户身份登录,然后使用 admin 的 url,那么显示 admin 的应用程序也已登录。即使我使用下面的代码 public function __construct() { if($this->session->userdata('user_role') == 'admin') { parent::__construct(); $this->load->model('user_model'); } else { redirect('administrator'); } },我也会收到类似这样的错误 遇到 PHP 错误严重性:通知消息:未定义属性:Users::$session 文件名:controllers/users.php 行号:6

标签: php codeigniter session web-applications


【解决方案1】:

首先检查天气你已经加载了会话库..

如果您验证空白值是错误的,请使用此

// to set the session data
$this->session->set_userdata('name', 'value');  // note u can also pass array

if(isset($this->session->userdata('name'))){

   //to read session data
   $this->session->userdata('name'); // note u can also pass array

   //to unset or delete
   $this->session->unset_userdata('name');

}

【讨论】:

  • 我有两种类型的用户。 1.管理员 2.用户。如果我以用户身份登录,然后使用 admin 的 url,那么显示 admin 的应用程序也已登录。即使我使用下面的代码 public function __construct() { if($this->session->userdata('user_role') = = 'admin') { 父::__construct(); $this->load->model('user_model'); } else { 重定向('管理员'); } } 我收到这样的错误 遇到 PHP 错误 严重性:通知消息:未定义的属性:Users::$session 文件名:controllers/users.php 行号:6
  • 修改了以下内容——不要将类构造放置两次,——如果你定义了私有函数,即使用函数__functionName(){},那么不要在它前面加上public。函数 someOtherMeaningfullFunctionName() { if($this->session->userdata('user_role') == 'admin') { $this->load->model('user_model'); } else { 重定向('管理员'); } }
【解决方案2】:

如果你之前已经定义了会话,

$this->session->set_userdata('logged_in', 'value');

然后检查session是否设置正确,

if(isset($this->session->userdata('logged_in')) {

      if($this->session->userdata('logged_in') == '') {
           // Your Code
      }
}

如果上述isset() 返回false,那么您的会话设置不正确。检查一下。

【讨论】:

    【解决方案3】:

    请加载会话库

    根据您是否自动加载会话库,我们需要包括:

        $this->load->library('session');
    

    那么你应该可以使用:

        $this->session->set_userdata('logged_in', 'some_value');
    

    并检查是否设置了会话,只需使用

       if($this->session->userdata('logged_in')){
          //code for logged in 
       }
    

    如果还是不行请清除浏览器缓存试试

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

      试试这个

       if ($this->session->userdata('logged_in')!=FALSE) {
      
              print_r($this->session->all_userdata());
          }
      

      这样你就可以找到当前的用户数据

      【讨论】:

        【解决方案5】:

        首先,您必须检查您尝试检索的会话项目是否存在,然后将其与您想要的值进行比较。 试试这个:

        if( $this->session->userdata("logged_in") !== FALSE ){
            if( $this->session->userdata("logged_in") == "admin" ){
                //logged in as admin
            }elseif( $this->session->userdata("logged_in") == "user" ){
                //logged in as user
            }
        }
        

        还有一点,

        parent::__constructor();
        

        line 应该始终是构造函数中的第一行代码,否则,您稍后会在代码中遇到很多错误

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 2012-08-11
          • 1970-01-01
          • 2012-07-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多