`

UCHome登陆验证机制分析

UI 
阅读更多
1、登陆详解:
A:用户填好登录表单之后数据被提交给source\do_login.php 处理
B:在do_login.php中下面这些语句接收传递来的用户名密码与cookie生效时间

view sourceprint?
1.    $password = $_POST['password'];
2.$username = trim($_POST['username']);
3.$cookietime = intval($_POST['cookietime']);
C:然后验证用户提交来的用户名以及密码的正确性,不正确则跳转并提示登录失败

view sourceprint?
1.//同步获取用户源
2.    if(!$passport = getpassport($username, $password)) {
3.        showmessage('login_failure_please_re_login', 'do.php?ac='.$_SCONFIG['login_action']);
4.    }
注意:这里验证用户名与密码的正确性是通过getpassport()函数里面调用uc_client在Ucenter用户中心数据库中查询的
D:若验证通过之后,再将获取到得用户账户信息赋给setarr变量数组

view sourceprint?
1.$setarr = array(
2.        'uid' => $passport['uid'],
3.        'username' => addslashes($passport['username']),
4.        'password' => md5("$passport[uid]|$_SGLOBAL[timestamp]")//本地密码随机生成
5.    );
E:查询uchome的数据库看该用户信息是否存在于Uchome数据库中,不存在的话,则将从Ucenter中查询到的用户数据写入到uchome的member表中,存在则将member中的密码替换掉从Ucenter中查询出来的密码,存入setarr变量数组中。

view sourceprint?
01.//检索当前用户
02.    $query = $_SGLOBAL['db']->query("SELECT password FROM ".tname('member')." WHERE uid='$setarr[uid]'");
03.    if($value = $_SGLOBAL['db']->fetch_array($query)) {
04.        //把ucenter中的用户密码替换成UChome中member表中的密码
05.        $setarr['password'] = addslashes($value['password']);
06.    } else {
07.        //更新本地用户库
08.        inserttable('member', $setarr, 0, true);
09.    }
F:将用户登录信息写入到Uchome的session表中
Insertsession函数在source\function_space.php中定义
其主要功能为a:清除session表中的某个用户的记录b:获得用户的IP以及是否使用隐身道具c: 将setarr变量数组中的数据插入到session表中。d:更新统计数数据等
G:将用户名与密码加密写入cookie中

view sourceprint?
1.//设置cookie
2.    ssetcookie('auth', authcode("$setarr[password]\t$setarr[uid]", 'ENCODE'), $cookietime);
3.    ssetcookie('loginuser', $passport['username'], 31536000);
4.    ssetcookie('_refer', '');
2:验证部分
判断当前用户登录状态是通过source\function_common.php中的checkauth函数实现的
下面就来分析这个函数

view sourceprint?
01.function checkauth() {
02.    global $_SGLOBAL, $_SC, $_SCONFIG, $_SCOOKIE, $_SN;
03. 
04.    if($_SGLOBAL['mobile'] && $_GET['m_auth']) $_SCOOKIE['auth'] = $_GET['m_auth'];
05.    if($_SCOOKIE['auth']) {
06.        @list($password, $uid) = explode("\t", authcode($_SCOOKIE['auth'], 'DECODE'));
07.        $_SGLOBAL['supe_uid'] = intval($uid);
08.        if($password && $_SGLOBAL['supe_uid']) {
09.            //从session表中获取ID为$_SGLOBAL[supe_uid]的session数据
10.            $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('session')." WHERE uid='$_SGLOBAL[supe_uid]'");
11.            //若session表中有该用户的数据
12.            if($member = $_SGLOBAL['db']->fetch_array($query)) {
13.                //判断session表中的密码和cookie中的密码是否相等
14.                if($member['password'] == $password) {
15.                    $_SGLOBAL['supe_username'] = addslashes($member['username']);
16.                    $_SGLOBAL['session'] = $member;
17.                } else {
18.                    $_SGLOBAL['supe_uid'] = 0;
19.                }
20.            //若session表中么有有该用户的数据,则从用户数据表member中查询该ID得用户数据
21.            } else {
22.                $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('member')." WHERE uid='$_SGLOBAL[supe_uid]'");
23.                if($member = $_SGLOBAL['db']->fetch_array($query)) {
24.                    if($member['password'] == $password) {
25.                        $_SGLOBAL['supe_username'] = addslashes($member['username']);
26.                        $session = array('uid' => $_SGLOBAL['supe_uid'], 'username' => $_SGLOBAL['supe_username'], 'password' => $password);
27.                        include_once(S_ROOT.'./source/function_space.php');
28.                        insertsession($session);//登录
29.                    } else {
30.                        $_SGLOBAL['supe_uid'] = 0;
31.                    }
32.                } else {
33.                    $_SGLOBAL['supe_uid'] = 0;
34.                }
35.            }
36.        }
37.    }
38.    if(empty($_SGLOBAL['supe_uid'])) {
39.        clearcookie();
40.    } else {
41.        $_SGLOBAL['username'] = $member['username'];
42.    }
43.}
A:判断$_cookie[auth]是否存在,若不存在则不进行任何处理,并清除所有cookie
B:从cookie中反解出用户名跟密码信息
注意:这里说的密码以及上面说的将密码加密进cookie中的密码并不是用户的真实密码,而是经过md5双重加密并且salt处理后的密码
C:从session数据表中取出用户ID为$_SGLOBAL[supe_uid]的用户信息,若该记录存在则执行下面的操作,否则执行D操作(直接查询用户数据库)如果取出来的密码与cookie中的密码相等,那么判定为登录成功将数据写入到$_SGLOBAL['session']数组否则判定为登录失败,清除所有cookie
D:在C步时,若在session表中没有该用户的数据则,在用户数据表member中查询该ID得用户数据,看cookie中的密码是否与数据库中的密码一样,如果一样则登录成功,并将用户数据写入到session表中保持用户的登录状态,否则登录失败
上面无论是用session表来判定登录状态还是用member表来判定登录状态,都会影响到一个变量,那就是$_SGLOBAL['supe_uid'],在程序处理的时候,用户登录与否一般要用到得变量就是$_SGLOBAL['supe_uid']。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    UCHOME 2.0新浪微博整合登录插件|QQ登录|人人网登录

    《UCHOME 2.0整合登录插件:微博、QQ与人人网的集成解析》 在互联网社交领域,用户账号的便捷登录已经成为提高用户体验的重要环节。UCHOME 2.0作为一个流行的社区建站系统,提供了丰富的插件支持,其中就包括了对...

    uchome部分代码分析2

    本文将对uchome的代码进行深入分析,主要涉及用户空间访问、二级域名设置、登录状态判断、最后登录名显示、总会员统计以及数据缓存和图片幻灯功能。 首先,我们关注的是如何访问其他用户的个人主页。在`Root/Index....

    UCHOME的QQ、新浪 api登录插件 技术文档

    《UCHOME的QQ、新浪API登录插件技术文档详解》 在互联网社交领域,用户账号的互联互通已经成为一种趋势,这极大地便利了用户的网络生活。UCHOME作为一款热门的社区建站系统,为了满足用户需求,提供了QQ和新浪的API...

    uchome ucenter 代码分析

    包括uchome、ucenter的数据库分析和模块分析,是uchome二次开发的入门资料!

    uchome部分代码分析1

    【uchome部分代码分析1】 本文将对uchome的代码进行部分解析,主要涉及用户空间访问、二级域名设置、已登录用户的跳转、最后登录名的显示以及总会员统计等功能。接下来,我们将逐一深入理解这些代码片段。 1. **...

    uchome wap

    1:本插件基于WAP1.X开发 适用于...4:拥有Wap站独有的登录验证功能,无需cookie支持,支持书签保存登录状态 5:拥有与PC版相同规则的积分机制与权限管理机制 6:拥有长文章自动分页功能 7:拥有与PC站相同的头像体系

    uchome ucenter全集

    通过查阅这些资料,开发者可以了解UCHome的运行机制,快速上手开发工作。 三、UCHome二次开发文档 UCHome的二次开发文档是开发者进行定制化改造的关键。文档通常会涵盖模板修改、插件开发、API调用等方面,让开发者...

    UCHOME个人网盘插件

    《UCHOME个人网盘插件详解与应用指南》 UCHOME个人网盘插件是一款针对UCHOME社区平台设计的专业插件,旨在为用户提供便捷、安全的个人存储空间,让用户能够轻松上传、分享、管理自己的文件。这款插件的出现,极大地...

    Uchome2.0 WAP插件.rar

    1:本插件基于WAP1.X开发 适用于...4:拥有Wap站独有的登录验证功能,无需cookie支持,支持书签保存登录状态 5:拥有与PC版相同规则的积分机制与权限管理机制 6:拥有长文章自动分页功能 7:拥有与PC站相同的头像体系

    uchome商家点评插件

    - 后台安装:登录UCHOME的后台管理界面,找到“插件管理”选项,点击“安装新插件”,选择已解压的插件目录进行安装。 - 配置插件:安装完成后,进入插件设置页面,根据实际需求配置相关参数,如显示位置、评分...

    uchome二次开发必备资料整合

    3. **源码阅读**:理解Uchome的核心架构和代码逻辑,重点是模板系统和插件机制。 4. **设计扩展**:根据需求设计新的功能模块,包括前端界面和后台逻辑。 5. **代码实现**:编写PHP代码,实现新功能,注意保持代码...

    uchome 核心程序分析common.php

    uchome 核心程序分析 请用 freemind 打开

    uchome 二次开发资料

    在二次开发中,开发者需要掌握如何调用Ucenter的API接口进行用户登录验证,确保用户在不同应用间的身份一致性。同时,理解数据同步的机制,有助于在添加新功能或更新原有功能时保持数据的一致性和完整性。 四、模板...

    Uchome 插件 串串烧(带排行榜) 亲测可用 Uchome插件

    在安装和使用这款插件时,需要注意的是,它已经经过了“亲测可用”的验证,这意味着在正常情况下,用户只需按照附带的使用说明进行操作,即可顺利地在自己的Uchome社区中部署并运行这款游戏。使用说明通常会涵盖安装...

    Uchome 插件 完美倒车游戏 亲测可用 Uchome插件

    3. **激活插件**:登录到Uchome的后台管理界面,找到“插件管理”部分,启用新上传的“完美倒车游戏”插件。 4. **设置权限**:根据需要,可以设定哪些用户群体可以访问这个游戏,例如,只对注册用户开放或者对所有...

    uchome仿YOHO模板

    2. 登录UCHOME的后台管理系统,选择"外观设置",然后在模板选择中找到并启用新模板。 3. 根据"新建 文本文档.txt"中的指导,配置模板的参数,例如LOGO替换、颜色主题设定等。 4. 测试模板在各个页面的表现,包括首页...

    UCHOME二次开发详解

    - **性能优化**:针对访问速度慢等问题,可以从数据库查询优化、缓存机制建立等方面入手。 - **兼容性问题**:如浏览器兼容性、不同设备适配等问题,需要进行针对性测试并调整代码。 - **安全防护**:加强输入验证、...

    uchome数据分析

    【UChome 数据分析】 UChome 是一款基于PHP开发的社区建站系统,它提供了丰富的社交功能,如用户管理、论坛、博客、相册等,使得网站管理员能够快速搭建起一个互动性强的社交平台。在对UChome进行数据分析时,主要...

Global site tag (gtag.js) - Google Analytics