为了保证移动端和服务端数据传输相对安全,需要对接口进行加密传输。

一、ttoken的设计目的: 

因为APP端没有和PC端一样的session机制,所以无法判断用户是否登陆,以及无法保持用户状态,所以就需要一种机制来实现session,这就是token的作用

token是用户登陆的唯一票据,只要APP传来的token和服务器端一致,就能证明你已经登陆(就和你去看电影一样,需要买票,拿着票就能进了)

二、token设计时的种类:

(1)第三方登陆型:
   这种token形如微信的access_token,设计原理是按照OAuth2.0来的,其特点是定时刷新(比如两小时刷新),目的是因为数据源将登陆权限赋予第三方服务器时必须要控制其有效期和权限,要不然第三方服务器可以不经过用户同意,无限期从数据源服务器获取用户任意数据。
 
(2)APP自用登陆型:
  这种token就是一般的APP用的token,因为不经过第三方,而是用户直接取数据源服务器数据,所以设计比较随意,只需要保证其token的唯一性就行。
 
三、APP自用登陆型token实现步骤: 

(1)数据库用户表添加token字段time_out这个token过期时间字段 

(2)用户登陆时(注册时自动登陆也需要)生成一个token和过期时间存入表中 

(3)在其他接口调用前判断token是否正确,正确则继续,错误则让用户重新登陆

四、APP自用登陆型token实现代码(公司自用框架及逻辑,主要看逻辑,不要直接复制代码):

(1)下面是用户登陆时把token插入数据库的代码

  $logininfo['token'] = appuser::settoken();

  $time_out = strtotime("+7 days");

  db::setByPk('u_adver', array('token1' => $logininfo['token'], 'time_out' => $time_out), $logininfo['id']);

(2)//下面是生成token方法代码

  public static function settoken(){

   $str = md5(uniqid(md5(microtime(true)),true));  //生成一个不会重复的字符串

  $str = sha1($str);  //加密

   return $str;

   }

(3)下面是每个接口都必须调用的token验证代码,验证具体实现是在(4)

  $args['token'] = $_POST['token'];

  $tokencheck = appuser::checktokens($args['token'], 'u_adver');

if ($tokencheck != 90001) {

$res['msg_code'] = $tokencheck;

v_json($res);

}

(4)token验证方法,db::是数据库操作类,这里设置是token如果七天没被调用则需要重新登陆(也就是说用户7天没有操作APP则需要重新登陆),如果某个接口被调用,则会重新刷新过期时间

  public static function checktokens($token, $table){

  $res = db::getOneForFields($table, 'time_out', 'token1 = ?', array($token));

  if (!empty($res)) {

    if (time() - $res['time_out'] > 0) {

     return 90003;  //token长时间未使用而过期,需重新登陆

    }

    $new_time_out = time() + 604800;//604800是七天

    if (db::setWhere($table, array('time_out' => $new_time_out), 'token1 = ?', array($token))) {

     return 90001;  //token验证成功,time_out刷新成功,可以获取接口信息

    }

   }

   return 90002;  //token错误验证失败

 }

App接口设计之token的php实现的更多相关文章

  1. Java生鲜电商平台-API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)

    Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...

  2. API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)

    Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...

  3. App接口设计

    关于APP接口设计 http://blog.csdn.net/gebitan505/article/details/37924711/

  4. 关于APP接口设计(转)

    最近一段时间一直在做APP接口,总结一下APP接口开发过程中的注意事项: 1.效率:接口访问速度 APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所 ...

  5. 关于APP接口设计

    最近一段时间一直在做APP接口,总结一下APP接口开发过程中的注意事项: 1.效率:接口访问速度 APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所 ...

  6. App接口设计原则-b

    1.记住密码不是真的让你记住密码,这里仅仅指的是一种自动登录的手段.不管在任何地方,明文存储的密码都是安全隐患,是必须尽量避免的.你可以采用某种方式对用户名.密码以及时间戳(重要)进行签名,再次登录时 ...

  7. 关于APP接口设计 (转)

    转自:http://blog.csdn.net/gebitan505/article/details/37924711 1.效率:接口访问速度 PHP建议使用YAF框架. 最好使用JSON格式数据,因 ...

  8. Spring Boot web API接口设计之token、timestamp、sign

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/vbirdbest/article/details/80789817一:token 简介Token:访 ...

  9. API 接口设计中 Token 类型的分类与设计

    在实际的网站设计中我们经常会遇到用户数据的验证和加密的问题,如果实现单点,如果保证数据准确,如何放着重放,如何防止CSRF等等 其中,在所有的服务设计中,都不可避免的涉及到Token的设计. 目前,基 ...

随机推荐

  1. Algorithms - Data Structure - Perfect Hashing - 完全散列

    相关概念 散列表 hashtable 是一种实现字典操作的有效数据结构. 在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标. 散列函数 hashfunction'h' 除法散 ...

  2. Verilog代码和FPGA硬件的映射关系(一)

    代码和硬件之间的映射关系是一个很奇妙的过程,也展现出人类的智慧.单片机内部的硬件结构都是固定的,无法改变,我们通过代码操作着寄存器的读写,来执行各种复杂的任务.FPGA的硬件结构并不像单片机一样是固定 ...

  3. centOS 6.8下使用Gparted进行分区扩容

    centOS 6.8下使用Gparted进行分区扩容 ​ 机器环境:windows上运行的VMware虚拟机,系统为centOS 6.8. ​ 由于前期分区分配空间过小,无法满足后续的数据存储预期,所 ...

  4. web自动化之键盘操作

    简单介绍下web自动化怎么触发键盘操作 按键操作 需要导入的类from selenium.webdriver.common.keys import Keys 组合键Keys.CONTROL 也就是我们 ...

  5. 整理总结数据库常用sql语句,建议收藏,忘记了可以来看一下

    第一节课:sql语言介绍(参照PPT)及基本查询sql学习 1.数据库表的介绍 emp表:员工表 dept表:部门表 salgrady:薪资水平表 Balance: 2.基本的查询语句: 知识点: s ...

  6. Android_存储之DataBase之Room

    概述: Room是Google在AndroidX中提供的一个ORM(Object Relational Mapping,对象关系映射)库.它是在SQLite上提供的一个抽象层,可以使用SQLite的全 ...

  7. angularjs 路由切换回到顶部

    angularjs路由切换  页面不会回到顶部 问题: 在angularjs中  ui-sref或者$state.go(),通过路由切换页面,发现新打开的路由页面仍然停留在上一次的路由页面访问的位置. ...

  8. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)部分(A~E)题解

    (A) Even Subset Sum Problem 题解:因为n非常非常小,直接暴力枚举所有区间即可. #include<bits/stdc++.h> using namespace ...

  9. Rocket - tilelink - Broadcast

    https://mp.weixin.qq.com/s/-pjCLzzincJz0Z66orx8kg   介绍Broadcast的实现.   ​​   1. 基本介绍   TLBroadcast实现的是 ...

  10. Chisel3 - Tutorial - Stack

    https://mp.weixin.qq.com/s/-AVJD1IfvNIJhmZM40DemA   实现后入先出(last in, first out)的栈.   参考链接: https://gi ...