构造函数中取不到session?
需求是登陆时确认成功后写日志,日志类是自己写的。登陆成功跳转前会写session,内容是用户名,然后调用日志类的方法写日志。
日志类的构造函数中会从session中把用户名取出来,结果发现取session这行放到构造函数中是取不出来的,放到其他函数中就没问题,不知道是不是BUG? 贴代码看一下。 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 Hex 发表于 2017-1-22 15:53
贴代码看一下。
倒也不是非得在构造函数中取session,只是觉得很奇怪,排错用了1个小时 hyperlau 发表于 2017-1-22 20:51
倒也不是非得在构造函数中取session,只是觉得很奇怪,排错用了1个小时
你的 Logtodb 和 Session 类库是 autoload 吗?如果是 autoload 那你怎么保证 Logtodb 实例化之前已经实例化 Session 类库呢? 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取不出来? hyperlau 发表于 2017-1-23 18:18
两个都是autoload的,但我没太明白您的意思,因为不管怎样的执行顺序,都没有报错,只是var_dump session ...
我觉得有可能是 autoload 顺序的问题,你可以试试不适用 autoload 看看可以不可以。
页:
[1]