Witam,
mam pewien problem. Otóż wzorowałem się na klasie sesji od punbb i mam pewien problem. Otóż za każdym przeładowaniem strony zmienia mi się session_id(). Oto kod:
<?php
class Session {
var $sess_info = array();
function Start() {
if ( !ini_get('session.auto_start') ) $_SESSION['previous_visit'] = ( !empty($_SESSION['previous_visit']) ) ?
$_SESSION['previous_visit'] : 0; $_SESSION['viewed_topics'] = ( isset($_SESSION['viewed_topics']) && is_array($_SESSION['viewed_topics']) ) ?
$_SESSION['viewed_topics'] : array(); $_SESSION['latest_post'] = ( !empty($_SESSION['latest_post']) ) ?
$_SESSION['latest_post'] : 0;
}
function Update($user_id=NULL) {
$ip_addr = ( !empty($_SERVER['REMOTE_ADDR']) ) ?
$_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');
$result = $db->query("SELECT s.user_id, s.started, s.ip_addr, u.* FROM sessions s LEFT JOIN members u ON u.id = s.user_id WHERE sess_id = '".session_id()."'"); $user_data = $db->fetch_result($result);
$session_started = true;
$current_sess_info = array( 'user_id' => $user_data['user_id'],
'started' => $user_data['started'],
'ip_addr' => $user_data['ip_addr']
);
if ( $current_sess_info['user_id'] )
unset($user_data['user_id'], $user_data['started'], $user_data['slocation'], $user_data['pages'], $user_data['ip_addr']); else
} else {
$session_started = false;
}
if ( $session_started && $current_sess_info['ip_addr'] !== $ip_addr ) {
setcookie($config['session_name'].'_sid', '', null, $config['cookie_path'], $config['domain'], 1
); die('<meta http-equiv="refresh" content="0;URL='.$url.'" />');
}
if ( $user_id !== NULL && abs(intval($user_id))==$user_id) { $user_data = $this->get_user_data($user_id);
$user_id = ( is_array($user_data) && $user_data['id']==$user_id ) ?
$user_id : 0;
} elseif ( !$session_started || !$current_sess_info['user_id'] ) {
if (!empty($_COOKIE[$config['session_name'].'_al']) ) {
list
($userid, $passwd) = unserialize($_COOKIE[$config['session_name'].'_al']); $user_data=$this->check_user($userid);
$user_id = ( $passwd == $user_data['password'] && $this->check_user($user_data) ) ? $userid : 0;
} else {
$user_id = 0;
}
} else {
$user_id = ( $this->check_user($user_data['id']) ) ? $user_data['id'] : 0;
}
'user_id' => $user_id,
'started' => ( $session_started ) ? $current_sess_info['started'] : $current_time,
'updated' => $current_time,
'ip_addr' => $ip_addr
);
if ( ( !$session_started && $new_sess_info['user_id'] ) || ( $session_started && $new_sess_info['user_id'] > $current_sess_info['user_id'] ) ) {
do {
$return = $db->query("SELECT COUNT(*) AS exist FROM sessions WHERE sess_id = '".$new_sid."'");
$exists = $db->fetch_result($return);
$exists = (bool)$exists['exist'];
} while ( $exists );
setcookie($config['session_name'].'_sid', $new_sid, null, $config['cookie_path'], $config['domain'], 1
);
}
if ( $session_started ) {
$update_query = "UPDATE sessions SET user_id = ".$new_sess_info['user_id'].", updated = ".$new_sess_info['updated'].", ip_addr = '".$new_sess_info['ip_addr']."', sess_id = '".$new_sid."'
WHERE sess_id = '".$old_sid."'";
} else {
$update_query = "UPDATE sessions SET user_id = ".$new_sess_info['user_id'].", updated = ".$new_sess_info['updated'].", ip_addr = '".$new_sess_info['ip_addr']."' WHERE sess_id = '".session_id()."'"; }
} else {
$update_query = "INSERT INTO sessions VALUES ('".session_id()."', ".$new_sess_info['user_id'].", '".$new_sess_info['ip_addr']."', ".$new_sess_info['started'].", ".$new_sess_info['updated'].")";
}
$db->query($update_query);
if ( $new_sess_info['user_id'] ) {
$add_to_update_query = ( !$session_started || $current_sess_info['user_id'] !== $new_sess_info['user_id'] ) ? ', last_login = '.$current_time : '';
$db->query("UPDATE members SET last_forum = ".$current_time.$add_to_update_query." WHERE id = ".$new_sess_info['user_id']);
}
));
$_SESSION['previous_visit'] = ( $new_sess_info['user_id'] && ( !$session_started || $current_sess_info['user_id'] !== $new_sess_info['user_id'] || empty($_SESSION['previous_visit']) ) ) ?
$user_data['last_forum'] : $_SESSION['previous_visit'];
}
function check_user($user_id) {
$result = $db->query("SELECT * FROM members WHERE id = ".abs(intval($user_id))." "); return $db->fetch_result($result);
}
}
?>
Gdzie popełniłem błąd? Dziękuję za pomoc
Dobra już nie aktualne... Chwila na świeżym powietrzu pomogła przy znalezieniu błędu: session_save_path($config['session_save_path']);