'data'=> $data, 'ip'=> $longip, 'useragent'=> $agent, 'bigdata'=> 0, ); // 开启 session 延迟更新,减轻压力,会导致不重要的数据(useragent,url)显示有些延迟,单位为秒。 $session_delay_update_on = !empty($conf['session_delay_update']) && $time - $g_session['last_date'] < $conf['session_delay_update']; if($session_delay_update_on) { unset($arr['fid']); unset($arr['url']); unset($arr['last_date']); } // 判断数据是否超长 $len = strlen($data); if($len > 255 && $g_session['bigdata'] == 0) { db_insert('session_data', array('sid'=>$sid)); } if($len <= 255) { $update = array_diff_value($arr, $g_session); db_update('session', array('sid'=>$sid), $update); if(!empty($g_session) && $g_session['bigdata'] == 1) { db_delete('session_data', array('sid'=>$sid)); } } else { $arr['data'] = ''; $arr['bigdata'] = 1; $update = array_diff_value($arr, $g_session); $update AND db_update('session', array('sid'=>$sid), $update); $arr2 = array('data'=>$data, 'last_date'=>$time); if($session_delay_update_on) unset($arr2['last_date']); $update2 = array_diff_value($arr2, $g_session); $update2 AND db_update('session_data', array('sid'=>$sid), $update2); } return TRUE; } function sess_destroy($sid) { //echo "sess_destroy($sid) \r\n"; db_delete('session', array('sid'=>$sid)); db_delete('session_data', array('sid'=>$sid)); return TRUE; } function sess_gc($maxlifetime) { global $time; // echo "sess_gc($maxlifetime) \r\n"; $expiry = $time - $maxlifetime; db_delete('session', array('last_date'=>array('<'=>$expiry))); db_delete('session_data', array('last_date'=>array('<'=>$expiry))); return TRUE; } function sess_start() { global $conf, $sid, $g_session; ini_set('session.name', 'bbs_sid'); ini_set('session.use_cookies', 'On'); ini_set('session.use_only_cookies', 'On'); ini_set('session.cookie_domain', ''); ini_set('session.cookie_path', ''); // 为空则表示当前目录和子目录 ini_set('session.cookie_secure', 'Off'); // 打开后,只有通过 https 才有效。 ini_set('session.cookie_lifetime', 8640000); ini_set('session.cookie_httponly', 'On'); // 打开后 js 获取不到 HTTP 设置的 cookie, 有效防止 XSS,这个对于安全很重要,除非有 BUG,否则不要关闭。 ini_set('session.gc_maxlifetime', $conf['online_hold_time']); // 活动时间 $conf['online_hold_time'] ini_set('session.gc_probability', 1); // 垃圾回收概率 = gc_probability/gc_divisor ini_set('session.gc_divisor', 500); // 垃圾回收时间 5 秒,在线人数 * 10 session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc'); // register_shutdown_function 会丢失当前目录,需要 chdir(APP_PATH) // 这个比须有,否则 ZEND 会提前释放 $db 资源 register_shutdown_function('session_write_close'); session_start(); $sid = session_id(); //$_SESSION['uid'] = $g_session['uid']; //$_SESSION['fid'] = $g_session['fid']; //echo "sess_start() sid: $sid
\r\n"; //print_r(db_find('session')); return $sid; } function online_count() { return db_count('session'); } function online_find_cache() { return db_find('session'); } function online_list_cache() { $onlinelist = cache_get('online_list'); if($onlinelist === NULL) { $onlinelist = db_find('session', array('uid'=>array('>'=>0)), array('last_date'=>-1), 1, 500); foreach($onlinelist as &$online) { $user = user_read_cache($online['uid']); $online['username'] = $user['username']; $online['gid'] = $user['gid']; $online['ip_fmt'] = long2ip($online['ip']); $online['last_date_fmt'] = date('Y-n-j H:i', $online['last_date']); } cache_set('online_list', $onlinelist, 300); } return $onlinelist; } ?>te']); } // 判断数据是否超长 $len = strlen($data); if($len > 255 && $g_session['bigdata'] == 0) { db_insert('session_data', array('sid'=>$sid)); } if($len <= 255) { $update = array_diff_value($arr, $g_session); db_update('session', array('sid'=>$sid), $update); if(!empty($g_session) && $g_session['bigdata'] == 1) { db_delete('session_data', array('sid'=>$sid)); } } else { $arr['data'] = ''; $arr['bigdata'] = 1; $update = array_diff_value($arr, $g_session); $update AND db_update('session', array('sid'=>$sid), $update); $arr2 = array('data'=>$data, 'last_date'=>$time); if($session_delay_update_on) unset($arr2['last_date']); $update2 = array_diff_value($arr2, $g_session); $update2 AND db_update('session_data', array('sid'=>$sid), $update2); } return TRUE; } function sess_destroy($sid) { //echo "sess_destroy($sid) \r\n"; db_delete('session', array('sid'=>$sid)); db_delete('session_data', array('sid'=>$sid)); return TRUE; } function sess_gc($maxlifetime) { global $time; // echo "sess_gc($maxlifetime) \r\n"; $expiry = $time - $maxlifetime; db_delete('session', array('last_date'=>array('<'=>$expiry))); db_delete('session_data', array('last_date'=>array('<'=>$expiry))); return TRUE; } function sess_start() { global $conf, $sid, $g_session; ini_set('session.name', 'bbs_sid'); ini_set('session.use_cookies', 'On'); ini_set('session.use_only_cookies', 'On'); ini_set('session.cookie_domain', ''); ini_set('session.cookie_path', ''); // 为空则表示当前目录和子目录 ini_set('session.cookie_secure', 'Off'); // 打开后,只有通过 https 才有效。 ini_set('session.cookie_lifetime', 8640000); ini_set('session.cookie_httponly', 'On'); // 打开后 js 获取不到 HTTP 设置的 cookie, 有效防止 XSS,这个对于安全很重要,除非有 BUG,否则不要关闭。 ini_set('session.gc_maxlifetime', $conf['online_hold_time']); // 活动时间 $conf['online_hold_time'] ini_set('session.gc_probability', 1); // 垃圾回收概率 = gc_probability/gc_divisor ini_set('session.gc_divisor', 500); // 垃圾回收时间 5 秒,在线人数 * 10 session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc'); // register_shutdown_function 会丢失当前目录,需要 chdir(APP_PATH) // 这个比须有,否则 ZEND 会提前释放 $db 资源 register_shutdown_function('session_write_close'); session_start(); $sid = session_id(); //$_SESSION['uid'] = $g_session['uid']; //$_SESSION['fid'] = $g_session['fid']; //echo "sess_start() sid: $sid
\r\n"; //print_r(db_find('session')); return $sid; } function online_count() { return db_count('session'); } function online_find_cache() { return db_find('session'); } function online_list_cache() { $onlinelist = cache_get('online_list'); if($onlinelist === NULL) { $onlinelist = db_find('session', array('uid'=>array('>'=>0)), array('last_date'=>-1), 1, 500); foreach($onlinelist as &$online) { $user = user_read_cache($online['uid']); $online['username'] = $user['username']; $online['gid'] = $user['gid']; $online['ip_fmt'] = long2ip($online['ip']); $online['last_date_fmt'] = date('Y-n-j H:i', $online['last_date']); } cache_set('online_list', $onlinelist, 300); } return $onlinelist; } ?>