阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 1960|回复: 1

Discuz 用户登录机制分析

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126198
QQ
发表于 2016-12-23 15:41:37 | 显示全部楼层 |阅读模式
$discuz_auth_key的获得
在common.inc.php文件中:


  1.         $discuz_auth_key = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);
  2.         //1.$_DCACHE['settings']['authkey']是论坛安装时生成的15位随机数
  3.         //在common.inc.php中通过include文件导入:
  4.         //$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'settings';
  5.         //2. $_SERVER["HTTP_USER_AGENT"]:记录用户浏览器相关信息的服务器端变量,例如:
  6.         //<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>
  7.         //Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)). 获取$discuz_pw, $discuz_secques, $discuz_uid
  8.         list($discuz_pw, $discuz_secques, $discuz_uid) = empty($_DCOOKIE['auth']) ? array('', '', 0) : daddslashes(explode("\t", authcode($_DCOOKIE['auth'], 'DECODE')), 1);
  9.         //1. 通过$_DCOOKIE['auth']来获取这三个变量,而$_DCOOKIE['auth']是在用户登录的时候通过$discuz_auth_key加密写入的!
  10.         //2. $discuz_pw : 密码
  11.         //3. $discuz_secques : 密码提示问题
  12.         //4. $discuz_uid : 用户uid).auth信息的写入方式1: 在调用UC的client.php文件中uc_user_login完成登录请注意,discuz的client.php和UCenter提供的标准client.php不一致,多了一些内容:
  13.         //1.UCenter提供的内容:
  14.         function uc_user_register($username, $password, $email) {
  15.             return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email));
  16.         }
  17.          
  18.         function uc_user_login($username, $password, $isuid=0) {
  19.             $isuid = intval($isuid);
  20.             $return = call_user_func(UC_API_FUNC, 'user', 'login', array('username'=>$username, 'password'=>$password, 'isuid'=>$isuid));
  21.             return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return);
  22.         }
  23.          
  24.         //2.Discuz使用的内容:
  25.         function uc_user_register($username, $password, $email, $questionid = '', $answer = '') {
  26.             return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer));
  27.         }
  28.          
  29.         function uc_user_login($username, $password, $isuid = 0, $checkques = 0, $questionid = '', $answer = '') {
  30.             $isuid = intval($isuid);
  31.             $return = call_user_func(UC_API_FUNC, 'user', 'login', array('username'=>$username, 'password'=>$password, 'isuid'=>$isuid, 'checkques'=>$checkques, 'questionid'=>$questionid, 'answer'=>$answer));
  32.             return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return);
  33.         }
  34.          
  35.         //3.他们最终会调用到uc的control目录下的user.php,其中的一些onlogin等函数也有不同,可以借鉴一下Discuz的实现方式。
  36. 方式2: 在./api/uc.php的synlogin中完成的(被其他程序通过UCenter同步登录)
  37.         _setcookie('auth', _authcode("$member[password]\t$member[secques]\t$member[uid]", 'ENCODE', $discuz_auth_key), $cookietime);
复制代码

http://blog.sina.com.cn/s/blog_63426ff90100ieic.html

捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

0

主题

69

回帖

635

积分

高级会员

Rank: 4

积分
635
发表于 2017-1-6 06:51:23 | 显示全部楼层
登录可见评论
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-5-4 02:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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