关于验证码存储机制的转变

简介: 关于验证码存储机制的转变

在平常的网站中,验证码用于识别是否是机器访问或是人工,防止机器大规模访问注册或暴力破解密码


在一般情况下,验证码的值存储都是以session来存储的,或者存储于数据库,redis缓存等等,但是这些都避免不了一个问题:都是服务器存储的


当在高并发场景下,session,文件存储都会导致php大量的读写文件,导致磁盘负载过高,或者redis缓存导致额外消耗内存性能,数据库性能等等问题


那该怎么设计一个不会影响服务器性能的验证码存储机制呢?


下面是一个实例:

<php?

$code'abcd';

$time= time();

$salt=  '这是自定义的盐值,不要公开';

$cookie1= md5($code.$time.$salt);

$cookie2$time;

当有验证码时,服务器固定一个salt,用于md5加密,再然后将md5加密后的值存储到用户的cookie当中


当用户提交自己写的验证码时,同时提交cookie1,和cookie2两个值,服务器根据用户输入的验证码,进行和salt一起md5加密比对cookie1

下面是验证实例:

<?php

$code$_POST['code'];

$cookie1$_POST['cookie1'];

$cookie2$_POST['cookie2'];

$salt=  '这是自定义的盐值,不要公开';

if(md5($code.$cookie2.$salt)==$cookie1){

//验证码正确

 

}

这样的话,服务端将不需要额外的存储来消耗资源,且能保证验证码的验证正常.



本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

目录
相关文章
|
存储 Java
Springboot 验证码生成和校验,图片格式和base64编码串
Springboot 验证码生成和校验,图片格式和base64编码串
1211 0
Springboot 验证码生成和校验,图片格式和base64编码串
|
JSON 安全 API
微店item_search_shop-获得店铺的所有商品API接口设计指南
本文介绍如何设计高效、安全且易用的item_search_shop API接口,用于微店商品检索和管理。关键需求包括数据完整性、高并发支持、安全性及易用性。开发者需在微店开放平台注册获取API凭证,并通过Access Token调用接口。接口支持一次性获取店铺所有商品信息,提供Python示例代码。注意事项涵盖凭证安全、异常处理和数据准确性。此API助力商家提升电商运营效率。
|
9月前
|
存储 弹性计算 资源调度
阿里云服务器收费模式对比:包年包月与按量付费的适用场景与选择参考
在我们购买阿里云服务器的时候,云服务器的收费模式主要有多种收费模式,其中包年包月和按量付费两种主流模式。对于准备在阿里云上部署应用的用户来说,选择合适的收费模式至关重要,因为它直接关系到成本控制和资源使用的灵活性。本文将对这两种收费模式做一个对比,以供参考和选择。
1258 14
|
编解码 Python
Python如何给视频添加音频和字幕
Python如何给视频添加音频和字幕
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
1650 0
|
传感器
Modbus协议深入解析
Modbus协议是由Modicon公司(现施耐德电气)于1979年发明的串行通信协议,主要用于工业自动化系统中的PLC通信。本文深入解析了Modbus协议的主从模式、数据类型(线圈、离散输入、保持寄存器、输入寄存器)、帧结构和通信过程,并介绍了其应用场景和重要性。
|
JSON 安全 数据安全/隐私保护
从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用
【9月更文挑战第22天】在.NET 8中,从零开始搭建权限管理系统并使用JWT(JSON Web Tokens)创建Token是关键步骤。JWT是一种开放标准(RFC 7519),用于安全传输信息,由头部、载荷和签名三部分组成。首先需安装`Microsoft.AspNetCore.Authentication.JwtBearer`包,并在`Program.cs`中配置JWT服务。接着,创建一个静态方法`GenerateToken`生成包含用户名和角色的Token。最后,在控制器中使用`[Authorize]`属性验证和解析Token,从而实现身份验证和授权功能。
1204 4
|
XML Java 数据库连接
Myatis 系列之 一对多、多对一 及 ResultMap的使用
文章详细介绍了Mybatis中使用`resultMap`处理数据库表字段名和实体类属性名不一致问题,以及实现一对多和多对一关系映射的方法,并提供了相应的XML配置和测试用例。
Myatis 系列之 一对多、多对一 及 ResultMap的使用
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
1769 4
|
JSON 人工智能 数据库
【AI大模型应用开发】【LangChain系列】1. 全面学习LangChain输入输出I/O模块:理论介绍+实战示例+细节注释
【AI大模型应用开发】【LangChain系列】1. 全面学习LangChain输入输出I/O模块:理论介绍+实战示例+细节注释
774 0
【AI大模型应用开发】【LangChain系列】1. 全面学习LangChain输入输出I/O模块:理论介绍+实战示例+细节注释