0

0

PHP开发高可用高安全app后端学习笔记

不言

不言

发布时间:2018-04-08 09:33:53

|

5517人浏览过

|

来源于php中文网

原创

本篇文章给大家分享的是php开发高可用高安全app后端的学习笔记 ,有需要的朋友可以参考一下文章的内容

源码下载地址:https://download.csdn.net/download/qq_21683643/10331534
目录
1.安全性
2.授权码sign算法
3.登录场景access_user_token算法
4.token唯一性支持
5.API一次性请求支持
6.高可用
7.Restful API
8.web登录和APP登录异同处
9.阿里大于短信验证解决客户端APP复杂登录场景
10.API接口版本解决方案
11.APP本地时间和服务器时间一致解决方案
12.不可预知的API内部异常解决方案
13.APP版本升级方案
14.利用七牛云解决图片处理基础服务能力
15.基础类库的封装
16.PHP设计模式的穿透
17.部分模块提供多种解决方案最后选择最优的方案
18.PHP和ajax的异步数据交互

1、restful api
数据结构格式
3. HTTP状态码使用TK自带的json实现
3. status 业务状态码  
4. message 提示信息
5. data 数据层
通用化API接口数据封装

function show($status, $message, $data=[], $httpCode=200) {
    $data = [        'status' => $status,        'message' => $message,        'data' => $data,
    ];    return json($data, $httpCode);
}

不可预知的内部异常api数据输出解决方案
config配置exception_handle填写异常类路径

class ApiHandleException extends  Handle {
    /**
     * http 状态码
     * @var int
     */
    public $httpCode = 500;    public function render(\Exception $e) {
        // 还原正常报错,上线后为flase(服务端开发)
        if(config('app_debug') == true) {            return parent::render($e);
        }        if ($e instanceof ApiException) {            $this->httpCode = $e->httpCode;
        }        return  show(0, $e->getMessage(), [], $this->httpCode);
    }
}class ApiException extends Exception {
    public $message = '';    public $httpCode = 500;    public $code = 0;    /**
     * @param string $message
     * @param int $httpCode
     * @param int $code
     */
    public function __construct($message = '', $httpCode = 0, $code = 0) {
        $this->httpCode = $httpCode;        $this->message = $message;        $this->code = $code;
    }
}

2、APP-API数据安全解决方案
解决方式就是各种的加密:MD5 AES(对称加密) RSA(非对称,效率较低)
sign (有效时间,唯一性)

/**
     * 生成每次请求的sign
     * @param array $data
     * @return string
     */
    public static function setSign($data = []) {
        // 1 按字段排序
        ksort($data);        // 2拼接字符串数据  &
        $string = http_build_query($data);        // 3通过aes来加密
        $string = (new Aes())->encrypt($string);        return $string;
    }/**
     * 检查sign是否正常
     * @param array $data
     * @param $data
     * @return boolen
     */
    public static function checkSignPass($data) {
        $str = (new Aes())->decrypt($data['sign']);        if(empty($str)) {            return false;
        }        // diid=xx&app_type=3
        parse_str($str, $arr);        if(!is_array($arr) || empty($arr['did'])
            || $arr['did'] != $data['did']
        ) {            return false;
        }        // 有效时间:时间间隔不能超过60s
        if(!config('app_debug')) {            if ((time() - ceil($arr['time'] / 1000)) > config('app.app_sign_time')) {                return false;
            }            //echo Cache::get($data['sign']);exit;
            // 唯一性判定
            if (Cache::get($data['sign'])) {                return false;
            }
        }        return true;
    }/**
     * 检查每次app请求的数据是否合法
     */
    public function checkRequestAuth() {
        // 首先需要获取headers
        $headers = request()->header();        // todo

        // sign 加密需要 客户端工程师 , 解密:服务端工程师
        // 1 headers body 仿照sign 做参数的加解密
        // 2
        //  3

        // 基础参数校验
        if(empty($headers['sign'])) {            throw new ApiException('sign不存在', 400);
        }        if(!in_array($headers['app_type'], config('app.apptypes'))) {            throw new ApiException('app_type不合法', 400);
        }        // 需要sign
        if(!IAuth::checkSignPass($headers)) {            throw new ApiException('授权码sign失败', 401);
        }
        Cache::set($headers['sign'], 1, config('app.app_sign_cache_time'));        // 1、文件  2、mysql 3、redis
        $this->headers = $headers;
    }

APP和服务器端时间一致性解决方案
解决1:获取服务端时间,客户端拿到服务端正确时间进行对比。
解决2:初始化app时传输时间戳,客户端时间=服务端时间戳+差值
3、API接口文档编写(API入参,出参的格式)
API接口地址   请求方式   post入参格式   出参格式  http code
4、APP版本升级业务开发
表的设计
CREATE TABLE ent_version (
id int(10) unsigned NOT NULL,
app_type varchar(20) NOT NULL DEFAULT ” COMMENT ‘app类型 比如 ios android’,
version int(8) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘内部版本号’,
version_code varchar(20) NOT NULL DEFAULT ” COMMENT ‘外部版本号比如1.2.3’,
is_force tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘是否强制更新0不,1强制更新’,
apk_url varchar(255) NOT NULL DEFAULT ” COMMENT ‘apk最新地址’,
upgrade_point varchar(500) NOT NULL DEFAULT ” COMMENT ‘升级提示’,
status tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘状态’,
create_time int(10) unsigned NOT NULL DEFAULT ‘0’,
update_time int(10) unsigned NOT NULL DEFAULT ‘0’
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
5、登录开发
1.1APP登录业务开发介绍
一般app有两种状态:登录态和未登录态
为什么要做登录?挖掘用户、互动、交流
如何做APP登录?模仿其他App登录
其他登录方式:免密手机号验证码、账号密码
第三方登录方式:qq授权、微信授权、微博授权
1.2App登录表结构的设计
CREATE TABLE ent_user (
id int(10) unsigned NOT NULL COMMENT ‘主键’,
username varchar(20) NOT NULL DEFAULT ” COMMENT ‘用户名’,
password char(32) NOT NULL DEFAULT ” COMMENT ‘密码’,
phone varchar(11) NOT NULL DEFAULT ” COMMENT ‘手机号’,
token varchar(100) NOT NULL DEFAULT ” COMMENT ‘令牌’,
time_out int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘令牌失效时间’,
image varchar(200) NOT NULL DEFAULT ” COMMENT ‘头像’,
sex tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘性别0男 1女’,
signature varchar(200) NOT NULL DEFAULT ” COMMENT ‘个性签名’,
create_time int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘注册时间’,
update_time int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘登录时间’,
status tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘状态是否锁定’
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.3阿里大于云通信服务平台介绍
什么是阿里大于
阿里大于提供了包括短信、语音等个性化的服务
1.4发送短信验证码功能开发

立即学习PHP免费学习笔记(深入)”;

1.5App登录token唯一性算法
App调用登录,服务端返回加密的token信息,每次app请求接口都需要带token
App生成唯一的token并加密:token=token+13位时间戳
1.6App按密码方式登录
用户名和密码都需要加密传输给服务端

萤火商城
萤火商城

萤火商城V2.0,是2021年全新推出的一款轻量级、高性能、前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城。萤火商城V2.0开源版 [uni-app端]如何使用uni-app端一、导入uniapp项目 1. 首先下载HBuilderX并安装,地址:https://www.dcloud

下载

6、APP端异常、性能监控及定位分析
APP端异常基本情况:
Crach  在使用App的过程中突然发生闪退现象
卡顿 出现画面的卡顿
Exception  程序出现的异常
ANR 出现提示无响应弹框(Android)
数据收集方案:
建立异常性能表,开发API接口
id  主键
app_type  app类型
version_code  版本号
Model       设备机型
Did          设备id
type         异常类型
Description    描述
Line          出错的行数
create_time   创建时间
成熟的解决方案:
使用第三方平台,app客户端接入sdk即可统计数据,如:友盟统计
7、APP消息推送服务解决方案
轮询法:APP定时向服务端发送http请求是否有消息
第三方平台:服务端->第三方平台->app

相关推荐:

整理的一些PHP开发安全问题

PHP开发Session原理以及使用详解

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

179

2025.11.26

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

455

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

166

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

170

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

124

2023.11.15

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号