1:类似PHP的hash_hmac

DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `uc_session_hmacsha1`(
    `_secretkey` ),
    `_message` )
)
) CHARSET utf8
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '类似PHP的hash_hmac'
BEGIN
);
);
);
,"");
/* process in 64-bit blocks to avoid overflow when converting to decimal*/
SET ipad = UNHEX(CONCAT(
LPAD(CONV(CONV(MID(hexkey,  ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey,,),,) ,),,),,"")
));
SET opad = UNHEX(CONCAT(
LPAD(CONV(CONV(MID(hexkey,  ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey, ,),,) ,),,),,""),
LPAD(CONV(CONV(MID(hexkey,,),,) ,),,),,"")
));
SET hmac = SHA1(CONCAT(opad,UNHEX(SHA1(CONCAT(ipad,_message)))));
RETURN hmac;
END;;
DELIMITER ;

2:商户自己生成的登录密钥

CREATE TABLE `uc_session_key` (
    `id` ) UNSIGNED NOT NULL AUTO_INCREMENT,
    `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `started` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `expired` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `secretkey` ) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `secertkey` (`secretkey`),
    UNIQUE INDEX `expired` (`expired`),
    UNIQUE INDEX `started` (`started`)
)
COMMENT='商户自己生成的登录密钥'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT
;

3:商户自己自动来生成随机的登录密钥

CREATE DEFINER=`root`@`%` EVENT `uc_session_autoadd`
    ON SCHEDULE
        EVERY  MINUTE STARTS '2018-10-28'
    ON COMPLETION PRESERVE
    ENABLE
    COMMENT '商户自己自动来生成随机的登录密钥'
    DO BEGIN
    DELETE FROM uc_session_key WHERE expired<CURRENT_TIMESTAMP();
    ,),RAND())));
END

4:商户获取自己指定keyid的信息

DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `uc_session_key_getbykeyid`(
    `keyid` INT unsigned,
    `ssskey` )
)
RETURNS json
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '商户获取自己指定keyid的信息'
BEGIN
    );
    );
    DECLARE _expired TIMESTAMP;
    SELECT v INTO _ssskey FROM uc_settings WHERE k='ssskey';
    IF ISNULL(_ssskey) THEN
        ,'message','ssskey未设置');
    END IF;
    IF _ssskey<>ssskey THEN
        ,'message','ssskey不匹配');
    END IF;
    SELECT secretkey,expired INTO _secretkey,_expired FROM uc_session_key WHERE id=keyid;
    IF ISNULL(_secretkey) THEN
        ,'message',CONCAT('keyid=',keyid,'不存在'));
    END IF;
    ,'secretkey',_secretkey,'expired',_expired);
END;;
DELIMITER ;

5:商户获取自己的最新keyid

DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `uc_session_key_getlastkeyid`()
) unsigned
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '商户获取自己的最新keyid'
BEGIN
    )UNSIGNED;
    ;
    RETURN _keyid;
END;;
DELIMITER ;

6:配置表

CREATE TABLE `uc_settings` (
    `k` ) NOT NULL DEFAULT '',
    `v` TEXT NOT NULL,
    PRIMARY KEY (`k`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
;
');

7:PHP脚本

<?php

$appid = 1;
$ssskey = '123456123456';
$pdo1 = new MyPDO('10.86.2.36', 3324, 'feieryun', 'feieryun', 'firadio_ucenter');
$pdo2 = new MyPDO('10.86.2.36', 3324, 'feieryun', 'feieryun', 'firadio_ucenter');
//取得UC的当前keyid
$uc_keyid = $pdo1->fetch('SELECT `uc_session_keycenter_getkeyid`(:_appid)', array('_appid' => $appid));
if (!is_numeric($uc_keyid)) {
    console('uc_keyid is not numeric.');
}
//取得商户的最新keyid
$app_keyid = $pdo2->fetch('SELECT `uc_session_key_getlastkeyid`()');
if (!is_numeric($app_keyid)) {
    console('app_keyid is not numeric.');
}
if ($uc_keyid === $app_keyid) {
    console('its same.');
}
//从商户数据库里分别取得UC和商户的secretkey
$bykeyid_old = json_decode($pdo2->fetch('SELECT `uc_session_key_getbykeyid`(:keyid,:ssskey)', array('ssskey' => $ssskey, 'keyid' => $uc_keyid)), true);
if (!isset($bykeyid_old['errno']) || $bykeyid_old['errno'] !== 0) {
    console($bykeyid_old);
}
$bykeyid_new = json_decode($pdo2->fetch('SELECT `uc_session_key_getbykeyid`(:keyid,:ssskey)', array('ssskey' => $ssskey, 'keyid' => $app_keyid)), true);
if (!isset($bykeyid_new['errno']) || $bykeyid_new['errno'] !== 0) {
    console($bykeyid_new);
}
//更新UC的secretkey
$result = json_decode($pdo1->fetch('SELECT `uc_session_keycenter_setnew`(:_appid,:old_secretkey,:new_keyid,:new_secretkey,:new_expired)',
array('_appid' => $appid, 'old_secretkey' => $bykeyid_old['secretkey'],
'new_keyid' => $app_keyid, 'new_secretkey' => $bykeyid_new['secretkey'], 'new_expired' => $bykeyid_new['expired'])), true);
if (!isset($result['errno']) || $result['errno'] !== 0) {
    console($result);
}
console('OK.');
function console($obj) {
    print_r($obj);
    exit;
}
class MyPDO {
    public function __construct($host, $port, $username, $password, $db) {
        $set = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'");
        try {
            $this->dbh = new PDO("mysql:host=$host;port=$port;dbname=$db;", $username, $password, $set);
        } catch (PDOException $e) {
            print "Error: " . $e->getMessage() . "<br/>";
            die();
        }
    }
    public function fetch($sql, $arr = array()) {
        $stmt = $this->dbh->prepare($sql);
        if (!$stmt->execute($arr)) {
            print_r($stmt->errorInfo());
            die();
        }
        return $stmt->fetch(3)[0];
    }
}

8:BAT

@ECHO OFF
:1
php -c php.ini php-mysql-pdo.php
TIMEOUT 10
GOTO 1
PAUSE

9:php.ini

[PHP]
extension_dir = "ext"
extension=pdo_mysql

UC登录功能:商户需要创建的表的更多相关文章

  1. node+vue进阶【课程学习系统项目实战详细讲解】打通前后端全栈开发(1):创建项目,完成登录功能

    第一章 建议学习时间8小时·分两次学习      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章]) 视频教程地 ...

  2. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  3. 个人永久性免费-Excel催化剂功能第30波-工作表快捷操作(批量创建、命名、排序、工作表目录)

    日常使用Excel过程中,最多的操作无外乎单元格和工作表的操作,单元格的操作在前面已经有详细的辅助功能提供,此篇提供工作表相关的操作.这两项的操作若能有提速,日常大量的工作叠加起来真是省下不少时间. ...

  4. Struts+Hibernate+Spring实现用户登录功能

    通过登录案例实现三大框架之间的整合,登录功能是任何系统和软件必不可少的一个模块,然而通过这个模块来认识这些复杂的框架技术,理解数据流向和整个设计思路是相当容易的.只有在掌握了这些小模块的应用后,才能轻 ...

  5. Struts2整合Hibernate3实现用户登录功能

    所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...

  6. 一步步带你做vue后台管理框架(三)——登录功能

    系列教程<一步步带你做vue后台管理框架>第三课 github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 ...

  7. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之登录功能

    昨天的博客中我分享了个人关于ssh实现员工管理的框架整合,今天我在分享管理员登录功能的实现.  转载请注明出处"http://www.cnblogs.com/smfx1314/p/78013 ...

  8. XMPP系列(二)----用户注册和用户登录功能

    1.创建一个新工程 2.导入XMPP框架 最新的XMPP框架下载地址:https://github.com/robbiehanson/XMPPFramework 将XMPP的几个文件夹拖进工程中,需要 ...

  9. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

随机推荐

  1. Action.c(58): Error -27796: Failed to connect to server &quot;hostname&quot;

    分析: 因为负载生成器的性能太好发数据特别快,服务器响应也特别快,从而导致负载生成器的端口在没有timeout之前就全部占满了. 解决方案一:   在负载生成器的注册表HKEY_LOCAL_MACHI ...

  2. CentOS 7.0,启用iptables防火墙

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

  3. System.Data.Oracleclient需要Oracle客户端软件Version8.1.7或更高版本问题

    C#连接ORACLE报System.Data.Oracleclient需要Oracle客户端软件Version8.1.7或更高版本问题: 开始Webservice在32位系统ORACLE10g库中we ...

  4. mapred和mapreduce

    总体上看,Hadoop MapReduce分为两部分:一部分是org.apache.hadoop.mapred.*,这里面主要包含旧的API接口以及MapReduce各个服务(JobTracker以及 ...

  5. 使用dreamever去掉文件头部BOM(bom)信息 From 百度经验

    本文来此百度经验: 地址为:http://jingyan.baidu.com/article/3f16e003c3dc172591c103e6.html OM主要处理浏览器窗口与框架,但事实上,浏览器 ...

  6. cocos 事件分发2

    cocos的事件分发器CCTouchDispatcher,存在两个通道, m_pTargetedHandlers存储CMenu,CScrollView的事件处理器, 这里的处理器,在处理过消息后,会声 ...

  7. Search for a Range ——LeetCode

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  8. hdu4417 Super Mario 树阵离线/划分树

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 Super Mario Time Limit: 2000/1000 MS (Java/Others)    ...

  9. hbase读的性能优化

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

  10. Prometheus 企业微信报警/inhibit抑制 /静默(二)

    创建企业微信应用 注册企业微信:访问https://work.weixin.qq.com/,注册企业,随便填,不需要认证 创建应用 创建告警配置 vim /usr/local/prometheus-2 ...