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