Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[解决中] home2.0实现同一账号如QQ样同时在不同IP登陆时会强迫先前登陆的下线!

[复制链接]
sybgood 发表于 2010-3-26 10:11:12 | 显示全部楼层 |阅读模式
本帖最后由 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));

}
玻璃屋女孩 发表于 2010-3-26 10:25:18 | 显示全部楼层
本帖最后由 玻璃屋女孩 于 2010-3-26 10:26 编辑

楼主把帖子编辑一下吧,现在查看主题需要购买
回复

使用道具 举报

 楼主| sybgood 发表于 2010-3-31 11:14:10 | 显示全部楼层
ddddddddddd
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-27 02:49 , Processed in 0.024124 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表