php 开发接口 怎么设计token比较合适

php 开发接口 怎么设计token比较合适,第1张

每登录一次返回给接口一个token,这个token会存储在单独的表里,每次APP关系到用户的 *** 作都必须要携带token,根据token来解码出是哪个用户。这种方法也可以做其他设备登录踢出。一般都是这么个做法。token的生成类似cookie的密码加密,我是这么做的,当然有很多种方法,只要你能加密能解密就行。下面是phpcms里面的一个经典的方法,我一般拿来做cookie加密,制作token来使用。

<php

/

 字符串加密、解密函数

 @param    string    $txt        字符串

 @param    string    $operation    ENCODE为加密,DECODE为解密,可选参数,默认为ENCODE,

 @param    string    $key        密钥:数字、字母、下划线

 @param    string    $expiry        过期时间

 @return    string

/

function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) {

    $ckey_length = 4;

    $key = md5($key != ''  $key : C('COOKIE_AUTH_KEY'));

    $keya = md5(substr($key, 0, 16));

    $keyb = md5(substr($key, 16, 16));

    $keyc = $ckey_length  ($operation == 'DECODE'  substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

    $cryptkey = $keyamd5($keya$keyc);

    $key_length = strlen($cryptkey);

    $string = $operation == 'DECODE'  base64_decode(strtr(substr($string, $ckey_length), '-_', '+/')) : sprintf('%010d', $expiry  $expiry + time() : 0)substr(md5($string$keyb), 0, 16)$string;

    $string_length = strlen($string);

    $result = '';

    $box = range(0, 255);

    $rndkey = array();

    for($i = 0; $i <= 255; $i++) {

        $rndkey[$i] = ord($cryptkey[$i % $key_length]);

    }

    for($j = $i = 0; $i < 256; $i++) {

        $j = ($j + $box[$i] + $rndkey[$i]) % 256;

        $tmp = $box[$i];

        $box[$i] = $box[$j];

        $box[$j] = $tmp;

    }

    for($a = $j = $i = 0; $i < $string_length; $i++) {

        $a = ($a + 1) % 256;

        $j = ($j + $box[$a]) % 256;

        $tmp = $box[$a];

        $box[$a] = $box[$j];

        $box[$j] = $tmp;

        $result = chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));

    }

    if($operation == 'DECODE') {

        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26)$keyb), 0, 16)) {

            return substr($result, 26);

        }else{

            return '';

        }

    }else{

        return $keycrtrim(strtr(base64_encode($result), '+/', '-_'), '=');

    }

}

>

Armors研究院也注意到了这个火热的游戏,我们研究了以往流行的区块链游戏,并结合这些游戏和区块链本身的一些特性,以及智能合约代码等进行了深入的讨论和思考。下图是公开的Fomo 3D智能合约在以太坊区块链上的截图。

同样是一款游戏,在传统的互联网领域很难想象到会这么受欢迎,然而在区块链时代,基于智能合约开发却获得了如此大的关注和追捧。Fomo 3D的爆红无疑让众多区块链团队心生羡慕。

如何才能在最短的时间内搭建一款像Fomo 3D一样火爆的区块链游戏呢?作为一家顶级的区块链解决方案供应商,接下来Armors会和大家一起从这款游戏的产品架构、核心逻辑等角度结合区块链来一起分析下。

首先,我们一起结合典型的区块链特性分析一下这款游戏的”价值观“设计。Fomo 3D这款游戏本身结合了区块链的众多特性,在价值观和对参与者的组织形式上都非常的“原生态区块链化”。

1去中心化——没有庄家

可能有的朋友会说,这款游戏还是有庄家啊,就是Fomo 官方啊。这里有两种视角可以来看:首先,在用户体验和参与游戏的角度来看,确实都是从这个游戏的官网来参与的,看起来官网是庄家;另外一个角度,游戏真正的逻辑部分其实是运行在以太坊区块链上的,这个是在去中心化的系统上,没有任何一个人能控制区块链的所有系统,这是一个去中心化的系统。

因此,也就意味着其他人如果有兴趣的话,也可以同样做一个网站接入层来接入这款游戏,大家一起通过区块链来调用这个游戏本身的智能合约。就相当于两个网站,使用同样一个后台一样,当然也可以做成10个网站甚至100个网站都一起接入这款游戏的智能合约。

这款游戏的核心逻辑是运行在区块链上的, 是不受任何独立个人能够控制的了的,是非常典型的去中心化。官方网站只是一个入口,而这个入口任何人都可以做一个同样的,并不影响游戏的核心运行。所以,这款游戏确实是完整的去中心化的。如果您对如何写好去中心化的智能合约感兴趣,也欢迎联系Armors。

2无信任——通过区块链达成共识和信任

由于使用智能合约开发,通过智能合约发布在以太坊区块链上,而且官方公布了其源代码。按照区块链世界”Code is Law“——代码即法条的定义,大家所有的参与游戏过程都会基于智能合约代码本身。在参与游戏的每一个环节上都不需要对其他任何一方有信任,非常好的做到了Trustless。

上文已经提到,由于运行在去中心化的网络上,没有任何一个人能在中途控制或者篡改游戏逻辑,那么任何接受这个游戏规则的人都可以参与进来,而不用担心任何人甚至官方作弊。

在社会组织中,能够让一群人彼此不需要信任的参与一件事情,并且达到期望的结果,这本身就是区块链的一个非常大的创新意义所在。而Fomo 3D通过智能合约开发,也很好的利用了这一点,将所有玩家通过这种方式进行组织,共同参与一个游戏,完成一个事情,达成一个目标。

3人人平等——参与门槛低

关于平等的问题,目前区块链行业是相对有些争议的,就像BTC和BCH一样大家在争吵要不要让中小玩家进来玩儿或是只有超级玩家一起玩儿一样。公有底层链EOS的出现,直接是通过超级节点的方式相当于抛弃了中小玩家矿工——EOS上叫做Block Producer而不是矿工的概念。

而大家对于经典区块链的认识层面,还是比较推崇人人平等的概念的,经常有人说:“也就是人人都能参与的区块链才是典型的区块链”。在Armors研究院的同事们讨论中,大家对于这一点也是有很激烈的碰撞,抛开商业利益,在技术信仰层面这也是非常值得研究的。

Fomo 3D在这一点上,就非常的平易近人,虽然游戏规则略复杂,可能新人有一个学习周期,但是参与成本真的不高,任何人在任何时间点都可以买Key进入游戏,只是早期进入的人有更多机会获取更大利益,这是不是也和经典的比特币区块链矿工模型很像呢——早期的比特币矿工挖矿成本相对较低,但是任何人在任何时间都可以买一台服务器或者矿机参与挖矿,只是到后面挖矿的成本会越来越高。

虽然Fomo 3D不是挖矿类游戏,只是一个智能合约,和挖矿没有半毛钱关系,但是游戏规则的设计,天然其实是非常符合区块链的”人人平等“,都有参与和贡献机会的设计的。

4刺激与激励——激励治理

在经典的区块链系统设计里面,激励主要是指对矿工记账过程的激励,这个过程一般称为挖矿。区块链获得如此迅速的发展,有大量的行业精英和公司参与进来,很大程度上得益于其良好的激励机制。基于相对的”平等“理念对所有人进行平等激励。激励体系也是众多的区块链底层链的必备设计,区块链的”通证经济“(Token Economy)和主要构成部分。

在Fomo 3D的游戏中,我们可以看到,获得激励有几种方式:买key之后获得空投与分红;邀请新用户进入、游戏结束后获得分红等。从游戏的前期注册、中期参与、后期结束各个阶段都有对应的激励规则。这些游戏规则设计的非常棒,对于游戏参与者有非常好的激励与刺激,尤其将这些规则写在了区块链智能合约变成不可篡改的游戏规则,不断有更多的人前仆后继、趋之若鹜。

5关于价值的创造与传递

最后这一点,和经典的区块链底层链不一样,其实Fomo 3D并没有实现,游戏本身并没有直接创造社会价值,更多是娱乐和消遣。在Armors众多的智能合约合作伙伴中,典型的比如基于ERC20的智能合约或者一些改变传统金融、保险等领域的智能合约以及DAPP,都会绑定比较多的现实价值,使用智能合约承载了很多的价值或者使用智能合约来辅助很多价值进行传播与现实世界的社会流程流转等。

经典的区块链项目都会比较多的实现对社会现实价值的绑定和价值传递上,而作为一款游戏,我们如果这样要求它的话确实也不是很合适。无论传统互联网领域还是区块链领域,游戏更多的在于休闲和娱乐,而非直接创造社会价值。

综上,作为一款区块链游戏,Fomo 3D已经完美的结合了区块链的去中心化、无信任、平等、激励治理等几大特性,其中有一部分是由于其基于智能合约进行开发而天然实现的,而有一些则是通过其游戏规则的设计,更好的把握了现实世界的人性和区块链世界的对标。作为一款游戏来讲,在这个时间点有这样的产品和技术设计,Armors研究院的同事们认为可以给出很高的评分了。

你的程序出现你说的错误,是因为函数print_hero的起始大括号位置不对

你的程序我帮你改完了(改动的地方见注释)

void print_wall() 

cout << " "; 

for (int i=1;i<=n;i++) 

cout << "-"; 

cout << endl; 

for (int j=0;j<=m-1;j++) 

cout << "|"; 

for (int i=1;i<=n;i++) cout << " "; 

cout << "|" << endl; 

cout << " "; 

for (int i=1;i<=n;i++) 

cout << "-"; 

}

void print_hero()//这里去掉函数尾部的分号

{//这里把函数上一行的大括号移到这里

locate hero[0]x,hero[0]y ;

cout << "@"; 

for (int i=1;i<=snake_length-1;i++) 

locate(snake[i]x,snake[i]y); 

cout << ""; 

}

所以你的意思是,首先你把它压缩成2禁止,然后你解析它,对,首先,据我所知,如果你把它压缩成2禁止,那么服务器端和电话端必须有相同的实现类,同时,序列号被实现了,对吗?好吧,有一个好处,你传输的是2禁止的,不是明文,这可以等同于加密。还有一个好处,你直接传输的是一个对象,你得到的也是一个对象,很方便,对吧?如果你直接传递它,那么它只是字符串,每个字段都需要被解析,如果它是一个数组,那就更困难了,数组更容易编写,如果你有一个 java 库,那就更容易编写,至于效率,很多,框架是非常高效的,满足用户需求,安全,稳定,也许你直接编写更高效,但是你需要更多的开发周期,像 ssh 框架,不一定是最高效的,但是使用反射机制非常方便,效率一般是非常低的,我明白,我们可以一起讨论

以上就是关于php 开发接口 怎么设计token比较合适全部的内容,包括:php 开发接口 怎么设计token比较合适、急!在线等! 输入一个字符串,过滤此串,只保留串中的字母字 符,并统计新生成串中包含的字母个数、expected unqualified-id before '{' token等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10146030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存