#38194 gửi bởi vuthao
Ngày 06 Tháng 07 2009 , 23:33
1) Bố trí hệ thống:
- Nukeviet được cài lên thư mục gốc của website, vd: http://nukeviet.vn/index.php
- Forum VBB được đặt vào thư mục forum của website, vd: http://nukeviet.vn/forum/index.php
2) Hướng dẫn code login:
Mã: Chọn hết

$user_prefix= "vbb_";
define('SESSION_IDHASH', md5($_SERVER['HTTP_USER_AGENT'] . fetch_substr_ip(fetch_alt_ip()))); // this should *never* change during a session
define('SESSION_HOST', $_SERVER['REMOTE_ADDR']);
define('TYPE_STR', 7); // force trimmed string
define('TYPE_INT', 2); // force integer
$set_tim = time();
$agent = (isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : getenv('HTTP_USER_AGENT');
$agent = substr (trim ($agent), 0, 100);
function fetch_substr_ip($ip, $length = null)
{
if ($length === null OR $length > 3)
{
$length = 1;
}
return implode('.', array_slice(explode('.', $ip), 0, 4 - $length));
}

function fetch_alt_ip()
{
$alt_ip = $_SERVER['REMOTE_ADDR'];

if (isset($_SERVER['HTTP_CLIENT_IP']))
{
$alt_ip = $_SERVER['HTTP_CLIENT_IP'];
}
else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches))
{
// try to avoid using an internal IP address, its probably a proxy
$ranges = array(
'10.0.0.0/8' => array(ip2long('10.0.0.0'), ip2long('10.255.255.255')),
'127.0.0.0/8' => array(ip2long('127.0.0.0'), ip2long('127.255.255.255')),
'169.254.0.0/16' => array(ip2long('169.254.0.0'), ip2long('169.254.255.255')),
'172.16.0.0/12' => array(ip2long('172.16.0.0'), ip2long('172.31.255.255')),
'192.168.0.0/16' => array(ip2long('192.168.0.0'), ip2long('192.168.255.255')),
);
foreach ($matches[0] AS $ip)
{
$ip_long = ip2long($ip);
if ($ip_long === false OR $ip_long == -1)
{
continue;
}

$private_ip = false;
foreach ($ranges AS $range)
{
if ($ip_long >= $range[0] AND $ip_long <= $range[1])
{
$private_ip = true;
break;
}
}

if (!$private_ip)
{
$alt_ip = $ip;
break;
}
}
}
else if (isset($_SERVER['HTTP_FROM']))
{
$alt_ip = $_SERVER['HTTP_FROM'];
}

return $alt_ip;
}



function fetch_sessionhash()
{
return md5(uniqid(microtime(), true));
}

function build_query_array($userid, $permanent)
{
global $db, $user_prefix, $set_time, $agent;

$return = array();

$db_fields = array(
'sessionhash' => TYPE_STR,
'userid' => TYPE_INT,
'host' => TYPE_STR,
'idhash' => TYPE_STR,
'lastactivity' => TYPE_INT,
'location' => TYPE_STR,
'styleid' => TYPE_INT,
'languageid' => TYPE_INT,
'loggedin' => TYPE_INT,
'inforum' => TYPE_INT,
'inthread' => TYPE_INT,
'incalendar' => TYPE_INT,
'badlocation' => TYPE_INT,
'useragent' => TYPE_STR,
'bypass' => TYPE_INT,
'profileupdate' => TYPE_INT,
);

$sessionhash = fetch_sessionhash();
if (!defined('SKIP_SESSIONCREATE'))
{
$expire = $set_time + 60 * 60 * 24 * 365;
setcookie('bblastactivity', 0, $expire);
setcookie('bblastvisit', $set_time, $expire);
if (!$permanent){
$expire = 0;
}
setcookie('bbsessionhash', $sessionhash, $expire);
}

$thisvars = array(
'sessionhash' => $sessionhash,
'dbsessionhash' => $sessionhash,
'userid' => intval($userid),
'host' => SESSION_HOST,
'idhash' => SESSION_IDHASH,
'lastactivity' => $set_time,
'location' => '',
'styleid' => 0,
'languageid' => 0,
'loggedin' => intval($userid) ? 1 : 0,
'inforum' => 0,
'inthread' => 0,
'incalendar' => 0,
'badlocation' => 0,
'profileupdate' => 0,
'useragent' => $agent,
'bypass' => 0
);

foreach ($db_fields AS $fieldname => $cleantype)
{
switch ($cleantype)
{
case TYPE_INT:
$cleaned = intval($thisvars["$fieldname"]);
break;
case TYPE_STR:
default:
$cleaned = "'" . $thisvars["$fieldname"] . "'";
}
$return["$fieldname"] = $cleaned;
}

return $return;
}
$username = "vuthao1";
$userpassword = "vuthao1vuthao1";
$cookieuser = 0;

$userinfo =$db->sql_fetchrow($db->sql_query("SELECT userid, usergroupid, membergroupids, infractiongroupids, username, password, salt FROM ".$user_prefix."user WHERE username = '".$username."'"));
if ($userinfo['password'] == md5(md5($userpassword) . $userinfo['salt'])) {
if ($cookieuser)
{
$expire = $set_time + 60 * 60 * 24 * 365;
setcookie('bbuserid', $userinfo['userid'], $expire);
setcookie('bbpassword', md5($userinfo['password']), $expire);
}
$sessionhashold = isset($_COOKIE["bbsessionhash"]) ? $_COOKIE["bbsessionhash"]:"";
if ($sessionhashold!="") $db->sql_query("DELETE FROM " . $user_prefix . "session WHERE sessionhash = '" . $sessionhashold . "'");
$cleaned = build_query_array($userinfo['userid'], $cookieuser);

$db->sql_query("
INSERT IGNORE INTO " . $user_prefix . "session
(" . implode(', ', array_keys($cleaned)) . ")
VALUES
(" . implode(', ', $cleaned) . ")
");
die('Dang nhap thanh cong, ban can lap trinh tiep cho viec chuyen trang');
}
else {
die('Dang nhap khong thanh cong');
}



chú ý: $user_prefix= "vbb_"; chính là giá trị của biến $config['Database']['tableprefix'] = 'vbb_'; trong file includes\config.php của vbb

Nếu biến $config['Misc']['cookieprefix'] của forum của bạn khác 'bb' ($config['Misc']['cookieprefix'] = 'bb';) bạn cần sửa lại code bên trên cho tương thích: vd: bbuserid --> newbbuserid, bbpassword-->newbbpassword, bbsessionhash --> newbbsessionhash ...
#38240 gửi bởi nghebao.com
Ngày 07 Tháng 07 2009 , 13:57
vuthao đã viết:1) Bố trí hệ thống:
- Nukeviet được cài lên thư mục gốc của website, vd: http://nukeviet.vn/index.php
- Forum phpbb được đặt vào thư mục forum của website, vd: http://nukeviet.vn/forum/index.php
2) Hướng dẫn code login:
Nếu biến $config['Misc']['cookieprefix'] của forum của bạn khác 'bb' ($config['Misc']['cookieprefix'] = 'bb';) bạn cần sửa lại code bên trên cho tương thích: vd: bbuserid --> newbbuserid, bbpassword-->newbbpassword, bbsessionhash --> newbbsessionhash ...

ủa sao vbb mà lại cài phpbb, vơi lại prefix bb cứ thấy giống phpbb?

Chuyên vòng bi http://www.bearings.vn