hyperlau 发表于 2017-1-21 23:42:20

构造函数中取不到session?

需求是登陆时确认成功后写日志,日志类是自己写的。
登陆成功跳转前会写session,内容是用户名,然后调用日志类的方法写日志。
日志类的构造函数中会从session中把用户名取出来,结果发现取session这行放到构造函数中是取不出来的,放到其他函数中就没问题,不知道是不是BUG?

Hex 发表于 2017-1-22 15:53:59

贴代码看一下。

hyperlau 发表于 2017-1-22 20:51:04

Hex 发表于 2017-1-22 15:53
贴代码看一下。

Login.php 代码段:
#判断用户状态
                        if ($data['usersinfo']['status'] == 1) {
                            #设置session,更新登陆时间,写日志,跳转到主页面
                            $this->session->set_userdata('s_username',$username);
                            $this->m_usermanage->update_lastlogintime($username);
                            #写日志
                            $this->logtodb->logdb(
                              array(
                                    'log_type'=>'0001',
                                    'log_content'=>array(
                                        'content'=>'用户成功登陆系统'
                                    )   
                              )   
                            );
                            redirect('mainpage');
logtodb类代码:
<?php
class Logtodb {
    protected $CI;
    public function __construct()
    {   
      $this->CI =& get_instance();
      $this->CI->load->model('m_logtodb');
      $this->logdata['log_user']=$this->CI->session->userdata('s_username');
    }   
      
    public function logdb($log_content) {
      $this->logdata['log_type']=$log_content['log_type'];
      $this->logdata['log_content']=serialize($log_content['log_content']);
if ($this->CI->m_logtodb->wrlog($this->logdata)) {
            return TRUE;
      }else{
            return FALSE;
      }
    }
}
?>
在其他页面都没问题,就是在Login的时候取不到session

hyperlau 发表于 2017-1-22 20:51:56

Hex 发表于 2017-1-22 15:53
贴代码看一下。

倒也不是非得在构造函数中取session,只是觉得很奇怪,排错用了1个小时

Hex 发表于 2017-1-23 11:27:03

hyperlau 发表于 2017-1-22 20:51
倒也不是非得在构造函数中取session,只是觉得很奇怪,排错用了1个小时

你的 Logtodb 和 Session 类库是 autoload 吗?如果是 autoload 那你怎么保证 Logtodb 实例化之前已经实例化 Session 类库呢?

hyperlau 发表于 2017-1-23 18:18:13

Hex 发表于 2017-1-23 11:27
你的 Logtodb 和 Session 类库是 autoload 吗?如果是 autoload 那你怎么保证 Logtodb 实例化之前已经实 ...

两个都是autoload的,但我没太明白您的意思,因为不管怎样的执行顺序,都没有报错,只是var_dump session的时候s_username没有值,有另外一个CI开头的session变量,这种情况仅仅出现在Login.php的logtodb调用,因为我是在写logtodb类的时候用的是另一个控制器去调试这个类,当时logtodb取session就是写在构造函数里的,是正确能取出来username的,所以我觉得是不是框架代码里有什么问题会导致构造函数取session取不出来?

Hex 发表于 2017-1-24 16:55:03

hyperlau 发表于 2017-1-23 18:18
两个都是autoload的,但我没太明白您的意思,因为不管怎样的执行顺序,都没有报错,只是var_dump session ...

我觉得有可能是 autoload 顺序的问题,你可以试试不适用 autoload 看看可以不可以。
页: [1]
查看完整版本: 构造函数中取不到session?