本帖最后由 sybgood 于 2010-3-26 17:11 编辑
使用home2.0过程中发现同一个账号可以在多台电脑不同IP情况下同时登陆,账号信息很不安全,别人用自己的账号同时和自己登陆都发现不了!于是就自己修改程序后实现了同一个账号在不同IP时只能有一人使用,后使用登陆的人会收到提示“该账号在其他地方的登录已被迫下线”并强迫下线先前登陆的用户;被迫下线的用户也会收到提示“你的账号已在其他地方登陆,你已经被迫下线!”。
实现方法:
1.给数据库表uchome_member添加字段ip。
2.在space_feed.php中if(empty($cp_mode)) include_once template("space_feed")前增加下面代码:
//屏蔽一个账户多台电脑同时登录
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('member ')." WHERE uid='$space[uid]' ");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$scip = $value['ip'];
}
$yhip=getonlineip();
if($yhip!=$scip && $scip!=''){
header("Location:/cp.php?ac=common&op=logout&uhash=$_SGLOBAL[uhash]&ff=y");
exit;
}
//-----------------
3.在lang_showmessage.php中添加:
'security_exit_1' => '<font color="#FF0000">你的账户在其他地方已登陆,你已被迫退出了\\1</font>',
'login_success_1' => '登录成功了,现在引导您进入登录前页面 \\1<br /><font color="#FF0000">安全提示:该账户在其他地方的登录已被迫下线!</font>',
4.在do_login.php中if(submitcheck('loginsubmit')) 最后添加代码:
//屏蔽一个账户多台电脑同时登录
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('member ')." WHERE uid='$space[uid]' ");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$scip = $value['ip'];
}
$yhip=getonlineip();
if($yhip!=$scip && $scip!=''){
$tsxx='login_success_1';
}else{
$tsxx='login_success';
}
updatetable('member', array('ip'=>$yhip), array('uid'=>$space['uid']));
//-----------------
并修改
showmessage($tsxx, $app?"userapp.php?id=$app"_POST['refer'], 1, array($ucsynlogin));
5.在cp_common.php中修改if($op == 'logout')为:
if($op == 'logout') {
if($_GET['uhash'] == $_SGLOBAL['uhash']) {
//删除session
if($_SGLOBAL['supe_uid']) {
$_SGLOBAL['db']->query("DELETE FROM ".tname('session')." WHERE uid='$_SGLOBAL[supe_uid]'");
$_SGLOBAL['db']->query("DELETE FROM ".tname('adminsession')." WHERE uid='$_SGLOBAL[supe_uid]'");//管理平台
}
if($_GET['ff']!='y') {
$_SGLOBAL['db']->query("UPDATE ".tname('member')." SET ip='' WHERE uid='$_SGLOBAL[supe_uid]'");
$tcxx='security_exit';
}else{
$tcxx='security_exit_1';
}
if($_SCONFIG['uc_status']) {
include_once S_ROOT.'./uc_client/client.php';
$ucsynlogout = uc_user_synlogout();
} else {
$ucsynlogout = '';
}
clearcookie();
ssetcookie('_refer', '');
}
showmessage($tcxx, 'index.php', 1, array($ucsynlogout));
} |