当前位置: 首页 > news >正文

Session与Cookie的区别(四)

咖啡寄杯的烦恼

虽然店里生意还可以,但小明无时无刻不想着怎么样发大财赚大钱,让店里的生意变得更好。

他观察到最近好多便利商店开始卖起了咖啡,而且时不时就买一送一或是第二件半价,并且贴心地提供了寄杯的服务。

寄杯就是指说你今天先喝一杯,剩下那杯我帮你记着,你下次来的时候跟我讲我再给你。

如果不提供这种服务,那买一送一就一定要两个人才能喝了(或是你立刻喝两杯),根本就是排挤像小明这样的边缘人。秉持着将心比心的原则,小明当然是希望提供寄杯服务的。

那该怎么寄呢?照之前那样不就得了吗?原本客人的手机里面会存着消费习惯之类的东西,现在多存一个还有几杯咖啡不就行了?

例如说客人买两杯只喝一杯,就在上面写着:coffee=1,代表还剩一杯咖啡,下次来的时候只要出示这个信息,就再给他一杯。

听起来十分合理,而且小明也这样做了,店里的生意变得更好,买咖啡的人愈来愈多,靠着咖啡就让单月营收翻了两倍。

一切看似非常顺利,直到小明月底对帐的时候:不对啊,为什么买咖啡的数量只有 55 杯,卖出去的却有 66 杯?

一向很相信人的小明,在那一瞬间见识到了人心的险恶之处。没错,有人自己偷改信息,例如说把 coffee=1 加个几划改成 coffee=7,就获得了额外六杯的免费咖啡。

这些奥步让小明狠狠一夜之间变成了大人,绝望的小明把悲愤转化成力量,只花了三个晚上就想到了两个解决方法。

第一个方法最简单,就是只要把存在客人手机上的信息加密就好了。

例如说原本是 coffee=1,经过小明自制的特殊加密算法之后,会变成 ED85B89167A84B631C10B046B5FB7FC0 这串只有小明知道怎么解开的密文。

这样一来,除非客人可以破解这段密码,否则信息就不可能被窜改。但有一个小缺点,那就是当小明想存的信息愈来愈多之后,这一串字也会愈来愈长,就会在客人的手机里面占更大的容量。

这个容量是有上限的,客人不会把整台手机都给你存这些信息,所以这点要特别注意。

这个方法解决问题的思路是这样的:「既然存在手机上的信息会被窜改,那我让他不能改就好」。

而第二个方法解决问题的思路是这样的:「既然存在手机上的信息会被窜改,那我把信息存在我这边不就好了吗?」

与其把那些消费习惯或是寄杯数量存在客人的手机里,不如把这些东西记在我的笔记本里面,并且用一种方式把这两个信息对应起来,这样就不怕数据会被改动了。

举例来说,小明可以在笔记本写下客人的身份证字号跟相关资讯,例如说:「A111111111 coffee=1」,接着小明只在客人的手机里面存「A111111111」。

下次客人再来消费的时候,就透过身份证字号去笔记本里面查,就知道客人到底还剩几杯咖啡了。

由于小明的笔记本每天下班都会锁在保险箱里面,因此不用害怕被偷或是被改,可以假设它一定是准确的。

而这样子的方式不把主要信息存在客人那里,而是存在自己这里,所以也不会有被窜改的风险。

可是有个问题,如果有人把身份证字号改成其他人的怎么办?那不就破功了吗?就可以伪造其他人的身份。

这个简单,不如不要用身份证字号,用一个 16 位数的英数字混合乱码好了,例如说:A59Uhe7I94J330mN,这样就很难被猜到了吧!

于是流程会变成这样:

客人那编只需要报 ID 即可,其他资讯都在小明那里

跟之前一样,他们都是透过一张纸条或者是手机里的信息来沟通,但唯一的差别是客人跟小明之间只透过 A59Uhe7I94J330mN 这个存在手机里的 ID 来验证身份,其他相关资讯都写在小明的笔记本里面。

这种验证的方法就像是我曾经去过的网咖。因为会员打咖比较便宜嘛,一小 60 变成一小 36,不办白不办,就办了一张会员卡。店员特别说明认卡不认人,一定要出示卡片才行。

我只要去打咖的时候出示这张会员卡,店员就知道我曾经消费过多少钱,也知道我喜欢点的餐点,所有的信息都是存在他们的系统里面,而我的身份就是透过这张会员卡来表示。

寄杯的例子中,会员卡就是 A59Uhe7I94J330mN 这个 ID,网咖的电脑系统就是小明的笔记本。

小明最后决定用第二种方法,也就是这种靠 ID 认人的方式来管理客人的状态。

从此之后就没有客人能够窜改信息了,而寄杯服务也运行的十分顺利,真是皆大欢喜,可喜可贺。

至于后来变得生意太好,让小明开了分店以后碰到的那些问题,就又是另外一段故事了。

相关文章:

Session与Cookie的区别(四)

咖啡寄杯的烦恼 虽然店里生意还可以,但小明无时无刻不想着怎么样发大财赚大钱,让店里的生意变得更好。 他观察到最近好多便利商店开始卖起了咖啡,而且时不时就买一送一或是第二件半价,并且贴心地提供了寄杯的服务。 寄杯就是指说你…...

Linux 文件锁 - fcntl

什么是文件锁&#xff1f; 即锁住文件&#xff0c;不让其他程序对文件做修改&#xff01; 为什么要锁住文件&#xff1f; 案例&#xff0c;有两个程序&#xff0c;都对一个文件做写入操作。 #include <unistd.h> #include <stdio.h> #include <stdlib.h> …...

CellularAutomata元胞向量机-2-初等元胞自动机MATLAB代码分享

%% 二维元胞自动机%imagesc(a)的色度矩阵a中0->256由蓝变黄% 规则&#xff0c;先把中间点置为1&#xff0c;每一时间每一点如果%周围八个点和为偶数&#xff0c;则变为0&#xff0c;为奇数则变为 1% 颜色控制clc, clearMap [1 1 1; 0 0 0];% [0 0 0] is black, [1 1 1] is …...

OpenStack云平台搭建(6) | 部署Neutron

目录 1.在控制节点登录数据库配置 2.要创建服务证书&#xff0c;完成这些步骤 3.创建网络服务API端点&#xff1a; 4.安装网络组件 5.配置neutron组件 6.配置 Modular Layer 2 (ML2) 插件 7.配置Linuxbridge代理 8.配置DHCP代理 9.配置元数据代理 10.编辑/etc/nova/no…...

Lesson 05.Configuring the Oracle Network Environment

Lesson 05. Configuring the Oracle Network Environment 文章目录Lesson 05. Configuring the Oracle Network Environment1. 监听程序的配置文件有哪些&#xff0c;如何命名&#xff0c;保存在什么位置&#xff1f;2. Oracle 网络的服务名称文件是如何命名的&#xff0c;需要…...

理论五:接口vs抽象类的区别,如何用普通的类模拟抽象类和接口

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模…...

【Hello Linux】 Linux的权限以及Shell原理

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍Linux的基础命令 Linux的权限以及Shell原理Shell的运行原理权限Linux中权限的概念如何切换用户如何提升当前操作的权限如何添加信任…...

【STM32】【HAL库】遥控关灯2 分机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 接收RF433和红外信号,根据信号内容控制舵机 硬件设计 主控采用stm32F103c6 STM32 433接收 其他接口 软件设计 接…...

代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II

93.复原IP地址 看完题后的思路 典型分割问题略lue略剪枝条件 sub&#xff1a; 1&#xff09; 不是一位首字母为0 2&#xff09;大于三位 3&#xff09;介于0-255之间 4) 当已分割得到3个时&#xff0c;第四个直接从startIndex到末尾就行 代码 ArrayList<String> slist…...

Unity UI合批的问题

今天看到一个问题&#xff0c;主要说的是Unity中的UI资源合批的问题之前一直以为主要和UI资源在Hierarchy中的排列顺序有关&#xff0c;但其实这并不是最主要的&#xff0c;因为Unity会对同一个Canvas下的UI进行排序&#xff08;注&#xff1a;不同Canvas下的资源是不能够合批的…...

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…...

PC端开发GUI

PC端开发GUI 一、搭建PC端环境:常规方式1、Python2、Pycharm二、搭建PC端环境:创建虚拟环境1、创建文件夹存放虚拟环境相关2、配置环境变量3、创建.ui文件4、.ui文件转成.py文件5、打包.py文件来发布.exe一、搭建PC端环境:常规方式 1、Python 注意Python版本不能超过3.9,…...

解读手机拍照的各个参数(拍照时,上面会有6个符号)

1第一个符号是闪光灯符号&#xff0c;如下图所示。有四种模式&#xff0c; 手机的闪光灯分别为关闭、自动、开启和常亮四种状态。 关闭&#xff1a;就是在任何情况下都不会闪光 自动&#xff1a;由手机来判断此时的光线强弱&#xff0c;若手机测光认为光线太弱&#xff0c;则…...

数字钥匙最新进展文章

在未来出行上&#xff0c;智能汽车越来越卷。 新车除了拼高精度激光雷达、堆大算力芯片、标配辅助驾驶、智能语音识别&#xff0c;还在车钥匙上展开了激烈角逐&#xff0c;越来越多的厂商开始在量产车型上搭载数字钥匙&#xff0c;实现无钥匙进入车内。 去年1月蔚来发布轿车E…...

如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)

一、安装前准备 虚拟机运行软件&#xff1a;VMware Workstation Pro&#xff0c;版本&#xff1a;16.0.0 。VMware Mac OS支持套件&#xff1a;Unlocker。Mac OS系统镜像。 如果VMware 在没有安装Unlocker的情况下启动&#xff0c;在选择客户机操作系统时没有支持Mac OS的选项…...

C++中的强制类型转换

接触过C语言的朋友都知道&#xff0c;C语言中也有强制类型转换&#xff0c;但是C语言中的强制类型转换会有一些问题&#xff0c;比如&#xff1a; int a 0x1234; char b (char)a; 上述的代码出现一个问题就是a 这个int型强制转化成b 这个char型时损失了一些精度&#xff0c…...

任何人都可以学习Rasa之优秀Rasa学习资源推荐

任何人都可以学习Rasa之优秀Rasa学习资源推荐 欢迎同学们报名Gavin老师的Rasa系列课程&#xff0c;任何人都可以学习Rasa之优秀Rasa学习资源推荐&#xff1a; 1.NLP on Transformers高手之路137课 2 .Rasa 3.X 智能对话机器人案例开发硬核实战高手之路 &#xff08;7大项目Ex…...

数据中心的 TCP-Delay ACK 与 RTO, RACK

TCP 对 RTO 有个最小值限制&#xff0c;一般限制为 MIN_RTO 200ms。之所以有这个限制&#xff0c;在于要适应 Delay ACK&#xff0c;而 Delay ACK 的意义&#xff0c;不多说&#xff0c;摘自 RFC1122&#xff1a; MIN_RTO 应该足够大&#xff0c;以覆盖 Delay ACK 的影响&…...

MySQL与常见面试题

目录 事务概述ACIDAUTOCOMMIT总结并发一致性问题丢失修改读脏数据不可重复读幻读原因和解决方法隔离级别未提交读(READ UNCOMMITTED)提交读(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)加锁封锁粒度封锁类型读写锁意向锁...

FFmpeg进阶: 采用音频滤镜对音频进行转码

文章目录采样位数采样率声道布局码率使用FFmpeg音频滤镜进行转码参考链接很多时候为了让视频文件适应不同的播放领域&#xff0c;我们需要对音频文件进行转码操作&#xff0c;转码操作其实主要就是修改音频文件的各种参数包括:采样位数、采样率、音频布局、码率等等。下面分别介…...

SwiftDate内存泄漏排查指南:5个Closure与委托模式最佳实践

SwiftDate内存泄漏排查指南&#xff1a;5个Closure与委托模式最佳实践 【免费下载链接】SwiftDate &#x1f414; Toolkit to parse, validate, manipulate, compare and display dates, time & timezones in Swift. 项目地址: https://gitcode.com/gh_mirrors/sw/SwiftD…...

LabelMe企业级部署方案:多用户权限管理与审计

LabelMe企业级部署方案&#xff1a;多用户权限管理与审计 LabelMe是一款强大的图像标注工具&#xff0c;支持多边形、矩形、圆形等多种标注形式&#xff0c;广泛应用于计算机视觉领域的数据准备工作。在企业环境中部署LabelMe时&#xff0c;多用户权限管理与操作审计是确保数据…...

brpc编译优化:提升二进制执行效率的编译选项

brpc编译优化&#xff1a;提升二进制执行效率的编译选项 【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation et…...

给视觉新手的保姆级教程:用Python+OpenCV玩转四步相移结构光(附代码)

零基础实战&#xff1a;用PythonOpenCV实现四步相移结构光三维重建 在计算机视觉领域&#xff0c;结构光三维重建技术因其高精度和非接触特性&#xff0c;被广泛应用于工业检测、逆向工程和医疗成像。对于刚接触这一领域的新手来说&#xff0c;最困扰的往往不是理解原理&#x…...

Qwen3-VL多模态检索系统:跨模态搜索部署实战案例

Qwen3-VL多模态检索系统&#xff1a;跨模态搜索部署实战案例 用图文对话技术构建智能搜索系统&#xff0c;让AI看懂图片内容并精准回答你的问题 1. 项目介绍与环境准备 Qwen3-VL是阿里最新开源的视觉-语言模型&#xff0c;可以说是目前最强大的多模态AI系统之一。这个模型不仅…...

别再手动下载模型了!用Xinference一键部署Qwen、ChatGLM等大模型(附CUDA环境配置避坑指南)

别再手动下载模型了&#xff01;用Xinference一键部署Qwen、ChatGLM等大模型&#xff08;附CUDA环境配置避坑指南&#xff09; 在AI模型部署的实践中&#xff0c;手动下载模型文件、配置复杂环境、解决依赖冲突等问题常常让开发者头疼不已。传统部署流程不仅耗时耗力&#xff0…...

别再用yield了!FastAPI 2.0官方弃用警告下的流式响应新范式(含ASGI StreamingResponse + async iterator最佳实践)

第一章&#xff1a;FastAPI 2.0流式响应弃用背景与演进动因FastAPI 2.0 将 StreamingResponse 的默认行为从“自动分块传输”转向显式、可控的流式语义&#xff0c;其核心动因源于对 HTTP/1.1 分块编码&#xff08;Chunked Transfer Encoding&#xff09;与现代客户端&#xff…...

【2026年最新600套毕设项目分享】springboot基于深度学习的蘑菇种类识别系统(14260)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...

专业级实时屏幕翻译工具深度解析:5大实战技巧提升工作效率

专业级实时屏幕翻译工具深度解析&#xff1a;5大实战技巧提升工作效率 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo Tra…...

TranslucentTB:Windows任务栏透明化工具,让桌面视觉体验焕然一新

TranslucentTB&#xff1a;Windows任务栏透明化工具&#xff0c;让桌面视觉体验焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB …...