目的:使用uc_authcode 获取论坛当前登录用户信息

曲折:看了Discuz官方的ucenter二次开发手册,其中的Example如下:

if(!empty($_COOKIE['Example_auth'])) {
    list($Example_uid, $Example_username) = explode("\t", uc_authcode($_COOKIE['Example_auth'], 'DECODE'));
}

尝试使用uc_authcode 去解密论坛的auth时,解密结果一直为空,搜索了下资料,提示UC_KEY 与加密时的密钥不一致

于是将Discuz在Ucenter中的key 附到了参数后,  uc_authcode($_COOKIE['Example_auth'], 'DECODE','62cf0b3c3e6a4c9468e7216839721d8e')

思索了一下,决定去看下Discuz的登录逻辑,看到synlogin() 方法时,我全局搜索了一下,找到了/api/uc.php 文件,其中的

dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);

正是authcookie的内容,原来在discuz内部,并没有使用uc_authcode,而是使用了authcode,方法位于source/function/function_core.php

中,其加密key为 getglobal('authkey'),而function getglobal $_G['authkey'] 的值 在 source/class/class_core.php中被定义为

$this->var['authkey'] = md5($this->var['config']['security']['authkey'].$this->var['cookie']['saltkey']);

关键的几个信息就都找到了,解密的逻辑步骤如下:

authinfo.php (存放至根目录下)

------------------------------------

<?php
/*
 *author:织梦的鱼
 *time:2011.10.16
  *title:discuz x2 当前用户登录信息解密
 */
echo "<pre>";
if (!defined('APPROOT')) {
    define('APPROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
}
if(!require_once(APPROOT . 'config' . DIRECTORY_SEPARATOR . 'config_global.php')){
    exit("该文件应存放于根目录下!");
}
include APPROOT . 'config' . DIRECTORY_SEPARATOR . 'config_ucenter.php';
include APPROOT . 'uc_client' . DIRECTORY_SEPARATOR . 'client.php';

if(substr($_config['cookie']['cookiepath'], 0, 1) != '/') {
            $_config['cookie']['cookiepath']= '/' . $_config['cookie']['cookiepath'];
}
$cookiepre =  $_config['cookie']['cookiepre'] . substr(md5($_config['cookie']['cookiepath'] . '|' .  $_config['cookie']['cookiedomain']), 0, 4) . '_';//COOKIE前缀

$auth = $cookiepre.'auth';//存储用户信息的COOKIE名
$saltkey = $_COOKIE[ $cookiepre . 'saltkey'];//解密auth用到的key

//$discuz_auth_key = md5($_config['security']['authkey'] . $_SERVER['HTTP_USER_AGENT']);//x1.5的密钥
$discuz_auth_key = md5($_config['security']['authkey'] . $saltkey);//x2的密钥
$auth_value = uc_authcode($_COOKIE[$auth],'DECODE',$discuz_auth_key);

//var_dump($_COOKIE);
//echo '<hr>';
echo "auth_cookie_value: " . $_COOKIE[$auth] . '<br>';

list($pwd,$uid ) = explode("\t", $auth_value);
echo "当前用户登录信息<br>";
echo 'UID:' . $uid." | 密码(md5):" . $pwd;
?>

使用uc_authcode 获取论坛当前登录用户信息相关推荐

  1. 采用redis+ThreadLocal获取全局的登录用户信息(二)增加token快失效时刷新

    在写token登录的时候,发现cookie中的token到时自动失效,如果此时有人正在操作,非常影响体验,于是增加了一个token快失效时刷新token的功能.下面代码重点就在TokenTool类中的 ...

  2. 采用redis+ThreadLocal获取全局的登录用户信息(一)

    1.首先进行登录操作,代码已经假设你从数据库拿到了用户信息保存在变量userinfo中,将token返回给浏览器保存,并将token和userinfo保存在redis中. @Resourcepriva ...

  3. Spring MVC 实战:三种方式获取登录用户信息

    前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie.Session.Token,不管哪种方案,都需要获取到用户信息供业务层使用. 由于获取用户信息与具体业务无关,因此在普通的 ...

  4. 若依框架获取和修改当前登录用户信息

    若依框架获取和修改当前登录用户信息 后台修改 前端修改 前言:做一些功能的时候我们肯定得用到当前登陆者信息,所以我就查找了一下若依怎么获取当前登录者信息,用this.$store.state.user ...

  5. java_后端获取当前登录用户信息

    后端获取当前登录用户信息 开发过程中,发现有很多地方需要获取当前登录的用户信息,比如新增.修改时候要记录创建人和更新人信息,如果每次操作都从数据库中获取用户信息,会增加不必要的开销,同时也增加数据库的 ...

  6. wordpress获取当前登录用户信息的方法

    1). get_currentuserinfo(); 此函数将当前登录用户信息赋给全局变量$current_user以及一些单独的用户信息全局变量例如$display_name, $user_emai ...

  7. linux ftp登录命令_Linux使用pinky命令查询登录用户信息

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解如何在Linux系统上使用pinky命令查 ...

  8. 安卓开发 登录用户信息缓存_在Linux上使用finger命令查询登录用户信息

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解finger命令的作用和日常使用案例. f ...

  9. Spring微服务间登录用户信息共享思路

    微服务之间使用feign的RequestInterceptor拦截器实现请求头传递当前登录用户信息:各线程中使用ThreadLocal存储数据:使用SpringAOP 在Controller类的方法增 ...

最新文章

  1. 推荐 | 统计学权威盘点过去50年最重要的统计学思想,因果推理、bootstrap等上榜,Judea Pearl点赞...
  2. 【PC工具】图片批量添加水印工具,绿色免安装工具软件
  3. 足坛绝代双骄全面数据对比,梅西30岁以后不如C罗?
  4. leetcode 67. 二进制求和(C语言)
  5. .Net程序调试与追踪的一些方法
  6. flume简介(大数据技术)
  7. VirtualBox安装完Linux却进不了系统
  8. Bootstrap缩略图.thumbnail
  9. Ansible 系统概述与部署(1)
  10. php 404重定向,如何使用PHP实现在WordPress中将404错误页面重定向到主页
  11. 给图片添加下雪飘雪动画特效动态图效果制作ps插件素材
  12. 电脑维修之——启动错误时的解决办法
  13. 【Python脚本进阶】2.4、conficker蠕虫(下):暴破口令,远程执行进程
  14. vmware win7 iso 镜像文件下载
  15. 电子工程师的自我修养 - 恒流源电路分析
  16. QA:Modem-QAM解码
  17. (2)Hadoop核心 -- java代码对MapReduce的例子1
  18. qs计算机专业排名2017,2017年最新世界大学专业排名权威发布!
  19. Metasploit 渗透测试之制作隐藏后门
  20. Ubuntu 搭建SVN服务器

热门文章

  1. 电商类微信平台推广方法有哪些?
  2. Python的基本数据类型
  3. Log4cpp: log4cpp快速使用指南
  4. js垃圾回收机制,内存泄露和内存溢出,解决闭包产生的内存泄露详解
  5. 华硕ASUS Prime Z370M-PLUS II黑苹果OpenCore EFI
  6. Unity-业余2D游戏制作笔记02-Dialogue System for Unity使用
  7. 学神经网络应该看看哪些书
  8. 盘点Linux操作系统的十大版本
  9. 常见Web安全漏洞深入解析
  10. unicode字符集与编码