Http 协议是一个无状态协议, 客户端每次发出请求, 请求之间是没有任何关系的。但是当多个浏览器同时访问同一服务时,服务器怎么区分来访者哪个是哪个呢?

cookie、session、token 就是来解决这个问题的。

cookie

  • cookie 仅仅是浏览器实现的一种数据存储功能,就是浏览器里面能永久存储的一种数据
  • 浏览器每次发生http请求,都会将请求域的 cookie 一同发给 server 端
  • server 端可以修改 cookie 并返回给浏览器
  • 浏览器端也可以通过 js 修改 cookie, 但是是有限制的,例如记录用户登录数据的某些 cookie 是禁止浏览器端随意修改的

session

如果说 cookie 是客户身上的“通行证”,那么 session 就是服务器上的“客户明细表”。客户第一次访问服务器,服务器会保存客户的信息,并给客户一个 cookie,下一次客户携带 cookie 访问服务器时,服务器会通过该 cookie 在客户明细表(session)中找出该用户信息,服务器就知道是哪个在访问了。

  • session 只保存在服务器上,是服务器端使用的一种记录客户端状态的机制
  • session 的使用方式是:客户端 cookie 里存 userid,服务端 session 存用户数据,客户端访问服务端的时候,根据 userid 找对应用户数据

token

token 也称作令牌, 注意在客户端里存 userid(也就是token)、用户信息、密文,而服务端只有一段加密代码,用来判断当前加密后的密文是否和客户端传递过来的密文一致,如果不一致,就是客户端的用户数据被篡改了,如果一致,就代表客户端的用户数据正常且正确。

token 在客户端一般存放于localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中。token 组成:

· uid: 用户唯一身份标识
· time: 当前时间的时间戳
· sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
· 固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库

token 认证流程与 cookie 类似:

1. 用户登录,成功后服务器返回Token给客户端。
2. 客户端收到数据后保存在客户端
3. 客户端再次访问服务器,将 token 放入 headers 中
4. 服务器端校验。校验成功则返回请求数据,校验失败则返回错误码(401)

redis:

redis 和 mysql 区别

  • redis 是 web server 最常用的缓存数据库,数据存放在内存中, 可存储的数据量较小,但是读取速度较快
  • 相比于 mysql, mysql 是关系型数据库,存储在硬盘中,可存储的数量较大,但是读取速度较慢
  • redis 和 mysql 一般配合使用

为何 session 或 token 更适合存储在 redis

  • session 或 token 访问频繁,对性能要求极高
  • session 或 token 不必但是丢失数据(丢失后,用户只需要重新登录即可)
  • 与其他存储在 mysql 中的数据相比,session 或 token 的数据量较小

为何其他网站数据不适合存储在 redis

  • 防止数据丢失
  • 数据量大,内存成本高
  • 操作频率不高

理解 Cookie,Session,Token 并结合 Redis 的使用的更多相关文章

  1. cookie, session, token 是什么 以及相应的安全考量

    Cookie cookie 最常见的是用来保存一些账号信息,比如下图里的 记住账号 就是记录到了cookie里面 cookie 更主要的是针对和server通信的,我们知道http 是无状态的,那如果 ...

  2. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

  3. cookie session token详解

    cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...

  4. django基础之day10,cookie session token

    https://www.cnblogs.com/Dominic-Ji/p/10886902.html cookie session token

  5. cookie,session,token介绍

    本文目录 发展史 Cookie Session Token 回到目录 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档 ...

  6. cookie & session & token compare

    cookie & session & token compare cookie.session.token 区别和优缺点 存储位置 cookie 存在 client 端 session ...

  7. cookie,session,token的理解

    Get  POST 区别异同点 淘宝token的 理解   过程算法 防止伪造请求  伪造相对难 简单发展史  登录的操作: 哪些人往自己的购物车中放商品,  也就是说我必须把每个人区分开,这就是一个 ...

  8. cookie,session,token的定义及区别

    参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...

  9. Jmeter的代理和cookie/session/Token令牌认证

    Jmeter的代理服务器 1.启动Jmeter: 2.“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:Global Settings下面的端口配置:9 ...

  10. 一文搞懂Cookie,Session,Token,JWT

    HTTP协议是无状态的,无状态意味着,服务器无法给不同的客户端响应不同的信息.这样一些交互业务就无法支撑了.Cookie应运而生. Cookie 通过F12开发者工具,先瞅瞅Cookie的颜值 从图中 ...

随机推荐

  1. i系列标准-互联网周刊

    原文:http://www.enet.com.cn/article/2019/0429/A20190429062899.html 传统意义上的规模.现代意义上的工具时代感.永远不会改变的最高意义上的使 ...

  2. Oracle系列十四 序列、索引和同义词

    序列 : 提供有规律的数值.索引  : 提高查询的效率同义词  :给对象起别名 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以 ...

  3. 008-linux shell vim使用

    一.概述 vi: Visual Interface 可视化接口 vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式) 输入模式 末行模式 模式转换 ...

  4. 2019 GDD breaking world‘s record of π

    Day 2 1.breaking pi‘s world record with google cloud [concept] memory wall: Originally theorized in ...

  5. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器和EasyDSS云平台异同

    背景分析 不同于EasyDSS流媒体服务器与EasyDSS流媒体解决方案(EasyDSS流媒体解决方案就是通过EasyDSS流媒体服务器完善业务层研发而来),EasyDSS流媒体服务器和EasyDSS ...

  6. ODAC 安裝 (11.2.4)

    1.下载解压 下载ODCA 安装包,下载地址:http://www.oracle.com/technetwork/database/windows/downloads/index-090165.htm ...

  7. Java进程故障排查思路及步骤

    故障场景 Java进程出现问题,通常表现出如下现象: Web应用响应时间长/超时,甚至不响应 CPU使用率极高/低,频繁出现Full GC,甚至OutOfMemoryError 响应时间长.超时,甚至 ...

  8. iperf—流量测试

    iperf是另外一款用于流量测试的软件,主要运行于Windows系统和安卓系统的手机/PAD(IOS系统下载需要收费). 一个工作在Server模式,另外一个工作在Client模式,输入Server的 ...

  9. Docker---数据卷Volume的简单使用(使用DockerFile实现)

    DockerFile是什么?Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.它们简化了从头到尾的流程并极大的简化了部署工作.Dockerfile从FR ...

  10. 怎么在eclipse中安装properties插件

    原文地址:https://jingyan.baidu.com/article/380abd0a6abe731d90192ce4.html 首先,在eclipse中点击“help”-"Inst ...