А есть ли возможность сделать вход на форум через сайт, у меня есть наработки, мод писал Ramzes:
Код: Выделить всё
#
#-----[ OPEN ]------------------------------------------
#
copy root/rmeConfig.php to forum/rmeConfig.php
copy root/rmeConfig.php to personal/rmeConfig.php
#
#-----[ OPEN ]------------------------------------------
#
personal/head.php
#
#-----[ FIND ]------------------------------------------
#
if ($action == 'dologin'){
$sql->update(array(
'table' => 'users',
'where' => array("username = $username"),
'values' => array('last_visit' => (time() + $config_date_adjust * 60))
));
#
#-----[ AFTER, ADD ]------------------------------------------
#
// [start] rmeMods
include($cutepath . '/rmeConfig.php');
define('IN_PHPBB', TRUE);
$phpbb_root_path = $cutepath . '/' . $forum_root_path;
include($cutepath . '/' . $forum_root_path . 'extension.inc');
include($cutepath . '/' . $forum_root_path . 'config.php');
include($cutepath . '/' . $forum_root_path . 'includes/constants.php');
$prefix = $sql->prefix;
$sql->prefix = '';
$query = $sql->select(array('select' => array('user_id', 'username', 'user_password', 'user_active', 'user_level', 'user_login_tries', 'user_last_login_try'), 'table' => USERS_TABLE, 'where' => array("username = $username")));
foreach ($query as $row)
{
list($sec, $usec) = explode(' ', microtime());
mt_srand((float) $sec + ((float) $usec * 100000));
$session_id = md5(uniqid(mt_rand(), true));
$sql->insert(array(
'table' => SESSIONS_TABLE,
'values' => array(
'session_id' => $session_id,
'session_user_id' => $row['user_id'],
'session_start' => time(),
'session_time' => time(),
'session_ip' => $user_ip,
'session_page' => 0,
'session_logged_in' => 1,
'session_admin' => 0
)
)
);
$sql->update(array(
'table' => USERS_TABLE,
'where' => array("user_id = " . $row['user_id']),
'values' => array('user_login_tries' => 0, 'user_last_login_try' => 0)
)
);
$sessiondata['autologinid'] = '';
$sessiondata['userid'] = $row['user_id'];
$query = $sql->select(array('table' => CONFIG_TABLE));
foreach ($query as $config)
{
if ( $config['config_name'] == 'cookie_domain' ) { $cookiedomain = $config['config_value']; }
if ( $config['config_name'] == 'cookie_path' ) { $cookiepath = $config['config_value']; }
if ( $config['config_name'] == 'cookie_name' ) { $cookiename = $config['config_value']; }
if ( $config['config_name'] == 'cookie_secure' ) { $cookiesecure = $config['config_value']; }
}
setcookie($cookiename . '_data', serialize($sessiondata), time() + 31536000, $cookiepath, $cookiedomain, $cookiesecure);
setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure);
$sql->update(array(
'table' => USERS_TABLE,
'where' => array("user_id = " . $row['user_id']),
'values' => array('user_login_tries' => 0, 'user_last_login_try' => 0))
);
}
$sql->prefix = $prefix;
// [end] rmeMods
#
#-----[ OPEN ]------------------------------------------
#
forum/login.php
#
#-----[ FIND ]------------------------------------------
#
$admin = (isset($HTTP_POST_VARS['admin'])) ? 1 : 0;
$session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin);
#
#-----[ AFTER, ADD ]------------------------------------------
#
// [start] rmeMods
include($phpbb_root_path . 'rmeConfig.php');
$cmd5_password = md5(md5($password));
setcookie('lastusername', $username, time() + 1012324305, $news_cookie_path);
setcookie('username', $username, time() + 3600 * 24 * 365, $news_cookie_path);
setcookie('md5_password', $cmd5_password, time() + 3600 * 24 * 365, $news_cookie_path);
// [end] rmeMods
Файл rmeConfig.php
Код: Выделить всё
<?php
$forum_root_path = '../forum/';
$news_root_path = '../personal/';
$news_cookie_path = '/int/personal';
if ( !isset($user_ip) )
{
if ( !function_exists(encode_ip) )
{
function encode_ip($dotquad_ip)
{
$ip_sep = explode('.', $dotquad_ip);
return sprintf('%02x%02x%02x%02x', $ip_sep[0], $ip_sep[1], $ip_sep[2], $ip_sep[3]);
}
}
$client_ip = ( !empty($HTTP_SERVER_VARS['REMOTE_ADDR']) ) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] : ( ( !empty($HTTP_ENV_VARS['REMOTE_ADDR']) ) ? $HTTP_ENV_VARS['REMOTE_ADDR'] : getenv('REMOTE_ADDR') );
$user_ip = encode_ip($client_ip);
}
if ( !function_exists(GetID) )
{
function GetID($size)
{
mt_srand((double) microtime() * 1000000);
for ( $i = 1; $i <= $size; $i++ )
{
$random = mt_rand(1, 30);
if ( $random <= 10 )
{
$sid .= chr(mt_rand(65, 90));
}
else if ( $random <= 20 )
{
$sid .= mt_rand(0, 9);
}
else
{
$sid .= chr(mt_rand(97, 122));
}
}
return $sid;
}
}
?>
но происходит следующая ошибка: при авторизации через сайт все проходит успешно, но если разлогинится и снова авторизовать то в таблицу phpbb_sessions идет повторная запись ID юзера который авторизовался, при этом получается две одинаковых записи и при выходе с форума логин остается в списке онлайн и соответственно остается запись в таблице phpbb_sessions. Как можно это поправить?