会话管理和身份验证和授权
Cookie、Session、Token
Cookie
简介:[Cookie]是一种小型文本文件,由服务器发送到用户的浏览器并保存在用户的计算机上。其主要作用是识别用户身份、跟踪用户活动、保存用户设置等。Cookie通常由名称、值、域名、路径、过期时间等字段组成,并且可以存储在用户的硬盘或内存中。
Cookie的定义和作用
Cookie是一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件。它主要用于识别用户身份、跟踪用户活动、保存用户设置等。例如,当用户登录一个网站时,服务器会生成一个包含会话ID的Cookie并发送给浏览器,浏览器将这个Cookie保存在本地。此后,每次用户发送请求时,浏览器都会自动将这个Cookie发送给服务器,服务器通过会话ID识别用户身份,从而保持用户的登录状态。
Cookie的组成和类型
Cookie通常由以下几个部分组成:
- - 名称(Name):Cookie的名称,一旦创建,名称不可更改。
- - 值(Value):存储的具体数据。
- - 路径(Path):Cookie的使用路径,通常以“/”表示根路径。
- - 过期时间(Expires/Max-Age):Cookie的有效时间,单位为秒。默认情况下,浏览器关闭后Cookie即失效。
- - 域名(Domain):可访问该Cookie的域名。
- - 安全标志(Secure):表示Cookie是否仅通过安全协议传输。
根据用途,Cookie可以分为以下几种类型:
- - 会话Cookie(Session Cookies):在浏览器关闭后即失效。
- - 持久Cookie(Persistent Cookies):存储在用户的硬盘上,直到过期或被删除。
Cookie的应用场景和安全性问题
1. 会话管理:用于保持用户的登录状态,通过会话ID识别用户身份。
2. 个性化设置:保存用户的个性化设置,如主题、语言、字体大小等。
3. 购物车功能:在电子商务网站中保存购物车信息。
4. 跟踪用户行为:记录用户在网站上的活动,如访问页面、停留时间、点击链接等。
5. 权限验证:作为用户的通行证,验证用户身份。
安全性问题
由于Cookie在HTTP请求中以明文传递,存在安全隐患。为了增强安全性,可以采用以下措施:
- - 加密存储:对敏感信息进行加密处理。
- - 使用安全协议:仅通过安全协议传输Cookie。
- - 设置Secure标志:确保Cookie仅通过安全协议传输
Session
[Session]是一种在服务器端存储与特定用户或客户端相关信息的机制。它通过服务器端的一个对象来存储用户的数据,每个Session对象都有一个唯一的ID,这个ID通过[Cookie]的形式发送给客户端。客户端在每次访问时只需将存储有ID的Cookie发回,服务器即可通过这个ID识别客户端并提供相应的个性化服务和数据。
Session的基本概念和作用
Session主要用于在网络应用中维持客户端与服务器之间的持久性交互,确保在多个请求之间能够维护客户端的状态信息。它通过会话标识符(Session ID)来唯一标识一个会话,使得在用户会话期间,可以在不同的请求之间共享状态信息。Session常用于存储用户的登录信息、购物车内容、用户偏好设置等,提供个性化体验并方便管理用户数据。
Session与[Cookie]的关系
Session和Cookie是一对互补的技术。当用户第一次访问网站时,服务器会创建一个Session对象并生成一个唯一的Session ID,然后将这个ID以Cookie的形式发送给客户端。客户端在后续的请求中携带这个Cookie,服务器通过Cookie中的Session ID识别用户,从而实现用户状态的维持和个性化服务的提供。虽然Session数据存储在服务器端,但需要通过Cookie来传递Session ID,因此在不支持Cookie的浏览器中,Session将无法正常工作。
Session的应用场景和优缺点
优点:
- - 个性化体验:提供个性化的服务,如根据用户的偏好展示不同的内容。
- - 方便管理:集中存储用户数据,便于管理和查询。
缺点:
- - 性能影响:可能会增加服务器的负担,特别是在高并发情况下。
- - 安全性问题:如果Session ID被截获,可能会导致用户信息泄露或会话劫持。
通过理解Session的基本概念、工作原理以及与Cookie的关系,可以更好地利用这一技术来提升网络应用的用户体验和数据管理效率
JWT
官网:[JSON Web Token Introduction - jwt.io](https://jwt.io/introduction/)
[JWT](JSON Web Token)是一种基于JSON格式的开放标准,用于在网络应用环境间传递声明,特别适用于身份验证和授权。 JWT的设计目的是为了在网络应用环境间安全地传输信息,通常用于[分布式系统]中的身份验证和授权场景,特别是在[单点登录](SSO)和跨域身份验证中。
JWT的基本概念和特点
JWT具有以下几个特点:
- - 轻量级:JWT是一个紧凑且自包含的数据格式,可以通过HTTP头或URL参数进行传输。
- - 自包含:JWT包含了足够的信息,使得客户端可以判断是否信任该令牌,而不需要查询服务器。
- - 可扩展:基于JSON格式,可以自定义Payload中的属性来适应各种业务需求。
- - 安全:使用签名来验证发送方和接收方之间的身份,确保消息的机密性和完整性。
JWT的结构
JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature):
1. 头部:包含令牌的类型(JWT)和使用的加密算法(如HS256)。
是一个JSON对象,用来描述JWT的元数据
```json{"alg": "HS256","typ": "JWT"}```
alg属性表示签名的算法(algorithm),默认是 HMAC SHA256 (写成 HS256) ;typ属性表示这个令牌(token)的类型(type),JWT令牌统一写为JWT。 最后,将上面的JSON对象使用Base64URL算法转成字符串。
2. 载荷:包含需要传递的数据,如用户身份信息、角色、权限等。
是一个JSON对象,用来存放实际需要传递的数据,JWT规定了7个官方字段
- ① iss (issuer):签发人
- ②exp (expiration time):过期时间
- ③sub (subject):主题
- ④nbf (Not Before):生效时间
- ⑤iat (lssued At):签发时间
- ⑥jti (JWT ID):编号
- ⑦aud (audience):受众
3.签名:基于头部和载荷的信息,使用秘钥生成的签名,用于验证令牌的真实性和完整性。
Signature部分是对前两部分的签名,防止数据篡改。 首先,需要指定一个==密钥 (secret)==。这个密钥只有服务器才知道,不能泄露给用户。然后,使用Header里面 指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。 HMACSHA256( base64UrlEncode(header) + ".”"+base64UrlEncode(payload), secret) 算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就 可以返回给用户。
JWT的使用场景和优势
JWT广泛应用于[RESTful API]中,因为它不需要维护任何状态信息。使用JWT可以解决传统[Session]机制在分布式系统中的问题,如session共享和扩展性问题。JWT通过在用户登录时生成一个令牌,客户端保存这个令牌并在每次请求时携带,服务器通过验证令牌来认证用户,从而简化了认证过程并提高了系统的可扩展性
JWT的使用方式
客户端收到服务器返回的JWT,可以储存在Cookie里面,也可以储存在 localStorage。SessionStorage 此后,客户端每次与服务器通信,都要带上这个JWT。你可以把它放在Cookie里面自动发送,但是这样不能跨域,所以更好的做法是放在HTTP请求的头信息Authorization字段里面
引入jar:
```xml
<!--引入jwt的依赖--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency>
```
创建jwt的工具类:
```java
public class JWTUtil {private static String key="1suo";//通过jwt创建token令牌public static String createToken(Map<String,Object> map){Map<String,Object> head=new HashMap<>();head.put("alg","HS256");head.put("typ","JWT");Date date=new Date();//发布日期Calendar instance = Calendar.getInstance();//获取当前时间instance.set(Calendar.SECOND,7200);//在当前时间的基础上添加7200秒Date time = instance.getTime();String token = JWT.create().withHeader(head) //设置头.withIssuedAt(date) //设置发布日期.withExpiresAt(time) //设置过期时间.withClaim("userinfo", map) //设置个人信息.sign(Algorithm.HMAC256(key));//签名return token;}//校验tokenpublic static boolean verify(String token){Verification require = JWT.require(Algorithm.HMAC256(key));try {require.build().verify(token);return true;}catch (Exception e){System.out.println("token错误");return false;}}//根据token获取自定义的信息public static Map<String,Object> getInfo(String token,String mykey){JWTVerifier build = JWT.require(Algorithm.HMAC256(key)).build();Claim claim = build.verify(token).getClaim(mykey);return claim.asMap();}
}
```
相关文章:
会话管理和身份验证和授权
Cookie、Session、Token Cookie 简介:[Cookie]是一种小型文本文件,由服务器发送到用户的浏览器并保存在用户的计算机上。其主要作用是识别用户身份、跟踪用户活动、保存用户设置等。Cookie通常由名称、值、域名、路径、过期时间等字段组成,并…...
RK3588 rknpu2/rkllm/rockit/mpp/rga 等源码验证
RK3588 简介 本项目基于rk3588硬件平台,将嵌入式、流媒体、AI等相关的技术验证源码地址 源码说明 buildroot 为buildroot使用方法dk_doc 为rk的文档mpp 在mpp例子上增加推流rga 为rk3588的硬件加速模块,可快速处理视频,提供的API接口与op…...
【CSS in Depth 2 精译_075】12.2 Web 字体简介 + 12.3 谷歌字体的用法
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体 ✔️12.3 谷歌字体 ✔️12.…...
【数字花园】个人知识库网站搭建:①netlify免费搭建数字花园
目录 [[数字花园]]的构建原理包括三个步骤:五个部署方案教程相关教程使用的平台 步骤信息管理 这里记录的自己搭建数字花园(在线个人知识库)的经历,首先尝试的是网上普遍使用的方法,也就是本篇文章介绍的。 后面会继续…...
访问者模式的理解和实践
在软件开发过程中,设计模式为我们提供了解决常见问题的最佳实践。访问者模式(Visitor Pattern)是行为设计模式之一,它将数据操作与数据结构分离,使得在不修改数据结构的前提下,能够定义作用于这些元素的新的…...
SpringBoot中Selenium详解
文章目录 SpringBoot中Selenium详解一、引言二、集成Selenium1、环境准备1.1、添加依赖 2、编写测试代码2.1、测试主类2.2、页面对象2.3、搜索组件 三、使用示例四、总结 SpringBoot中Selenium详解 一、引言 在现代软件开发中,自动化测试是提高软件质量、减少重复…...
Android 系统应用重名install安装失败分析解决
Android 系统应用重名install安装失败分析解决 文章目录 Android 系统应用重名install安装失败分析解决一、前言1、Android Persistent apps 简单介绍 二、系统 persistent 应用直接安装需求分析解决1、系统应用安装报错返回的信息2、分析解决 三、其他1、persistent系统应用in…...
scala中如何解决乘机排名相关的问题
任务目标: 1.计算每个同学的总分和平均分 2.按总分排名,取前三名 3.按单科排名,取前三名 好的,我们可以用Scala来完成这个任务。下面是一个简单的示例代码,它将演示如何实现这些功能: // 假设我们有一个…...
常用的注解
RequestMapping 用于映射请求路径 可以添加在类或方法上 请求类型 请求类型包括GET、POST、PUT、DELETE等 默认支持GET和POST两种方式 简写:GetMapping、PostMapping、PutMapping、DeleteMapping PostMapping("/buy") 等价 RequestMapping("/buy&quo…...
移动应用渗透测试:确保通过测试的关键安全策略
无论您是为了维持合规性、保护敏感用户数据,还是维护品牌声誉,顺利通过渗透测试(Pen Test)都是至关重要的。为了帮助您轻松应对这一过程,有几个积极的安全措施可以帮助确保您的应用程序更加安全。 通过采用高级安全机…...
【Canvas与光阑】立方体六彩光阑
【成图】 120*120的png图标 大小图: 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>立方体 六彩光阑 Draft2</…...
【ArcGIS微课1000例】0135:自动生成标识码(长度不变,前面自动加0)
文章目录 一、加载实验数据二、BSM计算方法一、加载实验数据 加载专栏《ArcGIS微课实验1000例(附数据)》配套数据中0135.rar中的建筑物数据,如下图所示: 打开属性表,BSM为数据库中要求的字段:以TD_T 1066-2021《不动产登记数据库标准》为例: 计算出来的BSM如下图: 二、B…...
nginx文件上传下载控制
上传大小控制 client_max_body_size 设置最大客户端请求体大小 默认大小1M,可以使用在http, server, location块。 根据不同的请求路径设置不同的大小控制 server {listen 9001;client_max_body_size 2M;location / {root D:\\server\\nginx-1.22.0\\html\\9001;}locat…...
LabelImg使用教程
(yolov5scondaPython3123) D:\PyCharm20240724\20240724PyCharmProject>conda.bat deactivate D:\PyCharm20240724\20240724PyCharmProject>conda activate labelimg_env (labelimg_env) D:\PyCharm20240724\20240724PyCharmProject> labelimg 创建快捷键方式...
运维新手入门——KVM(Beginner‘s Guide to Operations and Maintenance - kvm)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
Android 10.0 WiFi连接默认设置静态IP地址功能实现
1.前言 在10.0的系统rom定制化开发中,在定制化某些功能开发中,在wifi模块中,有产品需要要求设置wifi静态ip功能,而系统中wifi连接 后ip是动态的,每次开机后 连接wifi的ip就是不固定的,所以产品需要采用固定ip,就需要实现静态ip功能 2.WiFi连接默认设置静态IP地址功能实…...
ceph /etc/ceph-csi-config/config.json: no such file or directory
环境 rook-ceph 部署的 ceph。 问题 kubectl describe pod dragonfly-redis-master-0Warning FailedMount 7m59s (x20 over 46m) kubelet MountVolume.MountDevice failed for volume "pvc-c63e159a-c940-4001-bf0d-e6141634cc55" : rpc error: cod…...
windows C#-限制可访问性
属性或索引器的 get 和 set 部分称为访问器。 默认情况下,这些访问器具有与其所属属性或索引器相同的可见性或访问级别。不过,有时限制对其中某个访问器的访问是有益的。 通常,限制 set 访问器的可访问性,同时保持 get 访问器可公…...
Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
【数据分享】1901-2023年我国省市县三级逐年最低气温数据(Shp/Excel格式)
之前我们分享过1901-2023年1km分辨率逐月最低气温栅格数据和Excel和Shp格式的省市县三级逐月最低气温数据,原始的逐月最低气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据!基于逐月栅格数据我们采用求年平均值的方法得到逐年最…...
AlphaPose、yolov8Pose、RTMPose进行对比
一、Alphapose 参考: https://blog.csdn.net/m0_45850873/article/details/123939849...
【Linux】文件系统
文章目录 Group中的组成部分inode tableinode bitmapdata blocksblock bitmapgroup descriptor tablesuper block 文件系统关于inode和blocksinode和block是如何映射的?12个直接映射一级间接索引二级间接索引三级间接索引 为什么访问文件的是inode,但是我…...
希迪智驾持续亏损8.2亿:毛利率下滑,冲刺“自动驾驶矿卡第一股”
《港湾商业观察》黄懿 近日,希迪智驾(湖南)股份有限公司(下称“希迪智驾”)向港交所主板递交上市申请,联席保荐人为中金公司、中信建投国际、中国平安资本(香港)。 资料显示&#…...
Python实现中国象棋
探索中国象棋 Python 代码实现:从规则逻辑到游戏呈现 中国象棋,这款源远流长的棋类游戏,承载着深厚的文化底蕴与策略智慧。如今,借助 Python 与 Pygame 库,我们能够在数字世界中复刻其魅力,深入探究代码背后…...
C++小碗菜之五:GDB调试工具
“程序员不是编写代码的人,而是调试错误的人。” – 约翰本尼斯(John Bennet) 目录 前言 在虚拟机中安装 GDB GDB调试的实战演练 创建示例代码 例子: 使用 GDB 调试 编译代码 启动 GDB 设置断点 运行程序 打印变量值 …...
机器学习干货笔记分享:朴素贝叶斯算法
朴素贝叶斯分类是一种十分简单的分类算法,即对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。 以判定外国友人为例做一个形象的比喻。 若我们走在街上看到一个黑皮肤的外…...
bug:uniapp运行到微信开发者工具 白屏 页面空白
1、没有报错信息 2、预览和真机调试都能正常显示,说明代码没错 3、微信开发者工具版本已经是win7能装的最高版本了,1.05版 链接 不打算回滚旧版本 4、解决:最后改调试基础库为2.25.4解决了,使用更高版本的都会报错,所…...
VBA API 概述 | 宏编程
注:本文为 “VBA API 概述 | 宏编程 | 执行速度慢” 相关文章合辑。 VBA API 详解 Office 二次开发于 2020-12-17 22:27:10 发布 Office 版本变动 在 Office 2010 之前,微软仅提供 32-bit 版本的 Office。而自 Office 2010 起,出现了 32-b…...
《九重紫》逐集分析鉴赏—序言、概览、框架分析
主标题:《九重紫》一起追剧吧副标题:《九重紫》逐集分析鉴赏—序言、概览、框架分析《永夜星河》后,以为要浅尝剧荒,一部《九重紫》突出重围。 看了宣传片感觉不是很差,看了部分剪辑感觉还可以,看了一两集感…...
《Vue进阶教程》第六课:computed()函数详解(上)
往期内容: 《Vue零基础入门教程》合集(完结) 《Vue进阶教程》第一课:什么是组合式API 《Vue进阶教程》第二课:为什么提出组合式API 《Vue进阶教程》第三课:Vue响应式原理 《Vue进阶教程》第四课&#…...
MFC案例:基于对话框的简易阅读器
一、功能目标: 1.阅读txt文件 2.阅读时可以调整字体及字的大小 3.打开曾经阅读过的文件时,能够自动从上次阅读结束的位置开始显示,也就是能够保存和再次使用阅读信息。 4.对于利用剪贴板粘贴来的文字能够存储成txt文件保存。 5.显示…...
Python+OpenCV系列:图像的运算
文章目录 PythonOpenCV系列:图像的加权和、覆盖1. 图像加权和(加权融合)2. 图像覆盖(区域叠加)3. 应用场景4. 总结 PythonOpenCV系列:图像的加权和、覆盖 在图像处理中,图像的加权和与覆盖是两…...
【Python】【Conda 】Conda vs venv:Python开发者的虚拟环境选择指南
目录 引言一、概述1.1 Conda 虚拟环境1.2 Python venv 虚拟环境 二、安装与设置2.1 安装 Conda 虚拟环境2.2 安装 Python venv 虚拟环境 三、依赖管理3.1 Conda 依赖管理3.2 Python venv 依赖管理 四、适用场景五、性能与资源占用5.1 Conda 性能与资源占用5.2 Python venv 性能…...
gitee仓库的使用
1、本地创建文件夹:比如H:\python-study\Djangogitee 2、在gitee上创建一个仓库,比如django-project 3、Git 全局设置: 在第一步创建的文件夹下,打开Git Bash(需要提前下载好Git工具),执行下面命令 git co…...
openjudge_简单英文题_33:Is It a Tree
题目 33:Is It a Tree 总时间限制: 1000ms 内存限制: 65536kB 描述 Given edges of a graph with N nodes. Check whether it is a tree. 输入 First line: one positive integers N (N < 100). Next N lines: an N*N 0/1 matrix A{a[i][j]}, indicating whether there ex…...
MyBatis-Plus 中 IdWorker.getId() 方法
前言 在分布式系统中,生成全局唯一标识符(ID)是一个常见的需求。MyBatis-Plus 提供了多种 ID 生成策略,其中基于 Twitter 的 Snowflake 算法实现的 IdWorker.getId() 方法因其高效性和适应分布式环境的特点而备受青睐。然而&…...
JAVA面试汇总(三)集合(一)
JAVA多线程七篇终于写完了,今天开始了新的JAVA面试汇总,集合部分,这部分其实比多线程有意思多了,这个计划最多五篇,也许不到五篇,这是第一篇,开卷。 1.Collection和Collections 的区别ÿ…...
zookeeper的安装
zookeeper的安装 一.前言 zookeeper开源组件是为分布式应用,提供协调服务的一种解决方案。本文主要是介绍在Centos7的操作系统中,如何以单机,伪集群,集群的方式来安装部署zookeeper服务。zookeeper要求的jdk版本为1.6以上。本文假…...
2025系统架构师(一考就过):选择题基础知识一
考点1:CPU、指令 真题1:CPU 执行算术运算或逻辑运算时,常将源操作数和结果暂存在(累加器(AC))中。 真题2:在程序的执行过程中,Cache与主存的地址映射是由(硬…...
线性dp—acwing
题目:数字三角形 898. 数字三角形 - AcWing题库 看某个点,是从那些路径过来的去分析 分析1: 代码1:(顺序正推,二维dp数组) #include<bits/stdc.h> using namespace std;const int N 5…...
【QT】:QT(介绍、下载安装、认识 QT Creator)
背景 🚀 在我们的互联网中的核心岗位主要有以下几种 开发(程序员)测试运维(管理机器)产品经理(非技术岗位,提出需求) 而我们这里主要关注的是开发方向,开发岗位又分很…...
GPIO在ZYNQ7000中的结构和相关寄存器解析
GPIO MASK DATA LSW和 MASK DATA MSW LSW和MSW分别是LSW (Least Significant Word)和MSW (Most Significant Word)。 因为DATA是u32,所以如果寄存器的基址是XGPIOPS_DATA_LSW_OFFSET,那么32位就能同时让高16位的MASK DATA MSW]31:16和 MASK DATA LSW的bit7同时为…...
Docker学习笔记
目录 1,Docker概述 I,虚拟机技术 虚拟机技术缺点 II,容器化技术 III,比较docker和虚拟机技术不同 Ⅳ,DevOps(开发,运维) 1,应用更快速的交付和部署 2,更编辑的升级和扩缩容 …...
皮带,传送带异物检测识别数据集,2345张图像,yolo,coco,voc标记三种格式的数据集整理
皮带,传送带异物检测识别数据集,2345张图像,yolo,coco,voc标记三种格式的数据集整理 数据集分割 训练组79% 1860图片 有效集14% 318图片 测试集7% 167图片 预处理 自动定向: 已应用 调…...
大模型qiming面试内容整理-技术能力评估
技术能力评估是大模型相关岗位面试中最重要的环节之一,主要考察候选人是否具备处理复杂机器学习问题、设计和优化模型的能力。以下是技术能力评估的具体内容和可能涉及的题目: 机器学习基础 ● 监督学习与无监督学习: ○ 理解基本的机器学习类型和模型:监督学习:如回归(线…...
前端成长之路:HTML(3)
在HTML中,有列表标签。列表最大的特点是整齐、简洁、有序,用列表进行布局会更加自由方便。根据使用的情景不同,可以将列表分为三大类:无序列表、有序列表和自定义列表。 无序列表 在HTML中使用<ul>标签定义一个无序列表&a…...
小程序给元素设置line-height为0引起页面更新无效
问题 在小程序中使用setData更新,数据更新完毕,页面却没有更新值,甚至出现渲染错乱现象; 发现 但当点击相应事件的时候,视图又更新了。 思考 开始认为是没有在dom渲染后进行数据更新产生的问题,换了方法执行…...
【1355个俚语完结】跟李笑来学美式俚语(Most Common American Idioms): Part 68
Goal Completed 2024年12月11日22点25分完成这本书的学习。习得1355个俚语,尽管有些记得不牢,但是好在走在路上,一直往前走。后面就是多重复,多练习。 查看自己commit的日志,是从2024年11月15日开始学习这本书&#…...
TcpServer 服务器优化之后,加了多线程,对心跳包进行优化
TcpServer 服务器优化之后,加了多线程,对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…...
螺丝螺帽缺陷检测识别数据集,支持yolo,coco,voc三种格式的标记,一共3081张图片
螺丝螺帽缺陷检测识别数据集,支持yolo,coco,voc三种格式的标记,一共3081张图片 3081总图像数 数据集分割 训练组90% 2781图片 有效集7% 220图片 测试集3% 80图片 预处理…...