I am using CodeIgniter to develop my login system. Through a core extension of the controller class that gets the current user's information, I use $this->user throughout the app controllers to display the user's information. On my local WAMP server, this works perfectly. On my web server, however, it always displays the information of the guest after you login. Note the var_dump towards the bottom of the member get info method. This always displays the correct account information. But once I call it from the controller extension, it displays guest information.
The Controller extension class:
class MY_Controller extends CI_Controller {
var $user = array();
function __construct(){
parent::__construct();
$this->benchmark->mark('foo');
//$this->output->cache(5);
if(!$this->config->item('global_maintenance')){
$this->member->get_info($this->session->userdata('member_id'));
if($this->member->error == NULL){
$this->user = $this->member->info;
} else {
die($this->member->error);
}
} else {
die('BaseCMD is currently down for routine maintenance. Please try again later!');
}
}
}
The member model:
<?php
class Member extends CI_Model {
var $info = array();
var $activation_code = '';
var $error = NULL;
function __construct(){
parent::__construct();
$this->error = NULL;
}
function default_info(){
$info = array(
'id' => 0,
'display_name' => 'Guest',
'email_address' => '',
'password' => '',
'status' => 0,
'activation_code' => '',
'location' => '',
'date_joined' => '',
'gender' => '',
'results_per_page' => 10,
'admin_emails' => FALSE,
'member_emails' => FALSE,
'team' => array('id' => 0),
'perms' => array(),
'group' => array('id' => 0),
'stats' => array(),
'signature' => '',
'last_active' => 0,
'last_forum_visit' => 0,
'member_profile' => 'Guest',
'date_of_birth' => '',
'gender' => '',
'profile_banner' => '',
'avatar' => array('url' => '')
);
return $info;
}
public function get_info($criteria = 0){
if(is_numeric($criteria)){
$where = "WHERE m.member_id = ".$criteria;
} else {
$where = "WHERE email_address = '".$criteria."'";
}
$query_member = "
SELECT
m.member_id AS member_id, m.display_name, m.email_address, m.group_id, m.status, m.activation_code, UNIX_TIMESTAMP(m.date_joined) AS date_joined,
m.gender, m.location, m.biography, m.mantra, m.birth_date, m.results_per_page, m.admin_emails, m.member_emails, m.last_active, m.avatar_id,
m.banner_id, m.signature, m.newsletter_subscription, m.recruiting_status, m.facebook_username, m.website, m.steam_username, m.xboxlive_gamertag, m.psn_id,
g.group_id, g.title, g.description,
a.attachment_id, a.file_name,
f.message_id, f.author_id, COUNT(f.message_id) AS forum_count,
b.attachment_id AS banner_id, b.file_name AS banner_file,
mr.request_id, mr.author_id, mr.recipient_id, mr.status, COUNT(mr.request_id) AS total_friends,
tm.team_member_id, tm.member_id, tm.team_id
FROM members AS m
LEFT JOIN member_groups AS g ON (m.group_id = g.group_id)
LEFT JOIN attachments AS a ON (m.avatar_id = a.attachment_id)
LEFT JOIN forum_messages AS f ON (m.member_id = f.author_id)
LEFT JOIN attachments AS b ON (m.banner_id = b.attachment_id)
LEFT JOIN member_requests AS mr ON (m.member_id = mr.author_id OR m.member_id = mr.recipient_id) AND mr.status = 1
LEFT JOIN team_members AS tm ON (m.member_id = tm.member_id) AND date_left = ''
".$where."
GROUP BY m.member_id
LIMIT 1";
//show_error($query_member);
if($query_member = $this->db->query($query_member)){
if($query_member->num_rows() > 0){
$member = $query_member->row_array();
$member_id = $member['member_id'];
var_dump($this->session->all_userdata());
$info = array(
'id' => $member['member_id'],
'display_name' => $member['display_name'],
'email_address' => $member['email_address'],
'status' => ($member['status'] == 0) ? FALSE : TRUE,
'activation_code' => $member['activation_code'],
'location' => $member['location'],
'date_joined' => date('M jS, Y', $member['date_joined']),
'gender' => ($member['gender'] == 0) ? 'Male' : 'Female',
'results_per_page' => $member['results_per_page'],
'admin_emails' => ($member['admin_emails'] == 0) ? FALSE : TRUE,
'member_emails' => ($member['member_emails'] == 0) ? FALSE : TRUE,
'group' => array(
'id' => $member['group_id'],
'title' => $member['title'],
'description' => $member['description']
),
'signature' => $member['signature'],
'last_active' => strtotime($member['last_active']),
'member_profile' => anchor('members/'.url_title($member['display_name']).'/'.$member['member_id'], $member['display_name']),
'newsletter' => ($member['newsletter_subscription'] == 1) ? TRUE : FALSE,
'date_of_birth' => date('M jS, Y', strtotime($member['birth_date'])),
'birth_date' => date('Y-m-d', strtotime($member['birth_date'])),
'age' => floor((time() - strtotime($member['birth_date'])) / (60 * 60 * 24 * 365)),
'gender' => $member['gender'],
'biography' => $member['biography'],
'mantra' => $member['mantra'],
'contact' => array(
'email' => ($member['member_emails'] == '1') ? $member['email_address'] : NULL,
'website' => ($member['website'] != '') ? $member['website'] : NULL,
'facebook' => ($member['facebook_username'] != '') ? 'http://www.facebook.com/'.$member['facebook_username'] : NULL,
'steam' => ($member['steam_username'] != '') ? 'http://www.steamcommunity.com/id/'.$member['steam_username'] : NULL,
),
'gaming' => array(
'xboxlive' => $member['xboxlive_gamertag'],
'psn' => $member['psn_id'],
'steam' => $member['steam_username']
),
'statistics' => array('post_count' => $member['forum_count']),
'avatar' => array(
'attachment_id' => $member['attachment_id'],
'url' => base_url('attachments/'.$member['file_name'])
),
'banner' => array(
'id' => $member['banner_id'],
'url' => base_url('attachments/'.$member['banner_file'])
),
'friend_status' => FALSE,
'recruiting_status' => ($member['team_id'] == '' && $member['recruiting_status'] == '1') ? TRUE : FALSE
);
//$info['friend_results'] = $this->friend_results($member_id);
var_dump($info);
$this->info = $info;
} else {
$this->info = $this->default_info();
}
} else {
$this->error = $this->db->_error_message();
}
//show_error(var_dump($this->info));
}
Ok, so after dumping the variables from my controller extension, the member model, and my template, I realized that my problems didn't have anything to do with my sessions or my classes. It was actually my conditional statement that determined if the user was logged in or not that I use in my templates.
<?php
if($this->user['id'] === 0){// This is correct.
echo "You're logged out.";
}
if($this->user['id'] == 0) // This is what I was using and is not correct, apparently.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments