我在codeigniter 2.x会话类中遇到问题。我想在用户登录后在我的页面上使用userid进行全局访问
我有2个视图和1个控制器 一个视图,当用户提交表单时,我有一个登录表单 我通过调用控制器中的方法
来验证它并创建会话用户数据function create_session($data) {
$mydata = array(
'userid' => $data,
'role' => $role,
'logged_in' => TRUE
);
$this->session->set_userdata($mydata);
return;
}
然后加载我的第二个视图 我有这个观点
print_r($this->session->userdata);
并打印出正确的结果
但是当我点击导航中的第一个视图时 我喜欢那个
[userdata] =>
它是空的
我的会话配置为
$config['encryption_key'] = 'askdfjowieuriomzx,mv';
$config['sess_cookie_name'] = 'wana_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'wana_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
我搜索了论坛,但我无法解决这个问题 请解决此问题或提出替代方法。
答案 0 :(得分:1)
除了我写的评论之外,请确保在您需要的每个页面上加载会话库,或者使用自动加载。
答案 1 :(得分:1)
如果你设置了userdata,你可以从主控制器访问它,将它分配给受保护的var(数组),任何扩展你的主控制器的东西都应该有权访问它。
class Main_Controller extends CI_Controller
{
protected $_session_data=array();
public function __construct()
{
parent::__construct();
if($this->session->userdata)
{
foreach($this->session->userdata as $k => $v)
{
$this->_session_data[$k] = $v;
}
}
}
}
扩展主控制器的一些课程
class someclass extends Main_Controller
{
public function __construct()
{
parent::__construct()
}
public function view1()
{
$this->load->view('view1', array('session_data'=>$this->_session_data))
}
public function view2()
{
$this->load->view('view2', array('session_data'=>$this->_session_data))
}
}
每个视图中的
var_dump($session_data['uid'])
foreach($session_data as $k){}
答案 2 :(得分:1)
$config['sess_encrypt_cookie'] = FALSE;
这是我的配置,只是猜测
答案 3 :(得分:1)
尝试在config.php
$config['time_reference'] = 'gmt';
代替$config['time_reference'] = 'local';