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. linux删除文件的前n行

    需求描述: 今天看了一个系统的临时文件,有5.6G的大小,这个文件也没有用了,想要将大部分的文件都删除掉. 在此记录下删除的过程.删除前n行的记录. 操作过程: 对于数据量比较大的情况(本例5800万 ...

  2. Mariadb 10.3.17 中启用binlog

    先检查是否开启了binlogSHOW VARIABLES LIKE 'log_bin';如果提示:+---------------+-------+| Variable_name | Value |+ ...

  3. python初级(302) 7 列表(二)冒泡排序

    一.复习: 1.如何创建一个空列表,如何创建一个有数据的列表 2.列表可以包含的内容 3.从列表中获取元素和修改元素的方法 4.列表的分片 5.增加元素和删除元素 6.选择排序的算法: 一堆数据,每次 ...

  4. 学习 Git Rebase

    有问题为什么不问问神奇的 man 呢? rebase 也算是我比较常用的一个指令了,但是很长时间以来,对这个指令的认识还是不够深刻,于是就找了个时间认真地读了一下 git rebase 的文档.这份文 ...

  5. AIX日志相关的命令

    常用的命令有: 1.列出简短的出错信息 errpt | more 2.列出所有硬件出错信息 errpt -d H 3.列出所有软件错误信息 errpt -d S 4.列出详细的出错信息 errpt – ...

  6. 静默安装weblogic12c提示INST-07319: Oracle 主目录(O) 位置的验证失败。指定的位置已存在, 是非空目录并且不是有效的 Oracle 主目录

    [xxx@localhost bea12c3]$ java -jar fmw_12.2.1.3.0_wls.jar -silent -responseFile /app/bea12c3/weblogi ...

  7. prototype和__proto__的关系是什么?

    我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法.(这个对象下面有个属性,这个属性是另外一个对象的应用 ,这个属性就 ...

  8. JS系列:函数function

    ### 函数 function > 在js中函数就是一个方法(一个功能体)基于这个函数,一般是为了实现某个功能. ``` var total =10; total+=10; total=tota ...

  9. PAT 1093

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  10. kafka 如何保证数据不丢失

    一般我们在用到这种消息中件的时候,肯定会考虑要怎样才能保证数据不丢失,在面试中也会问到相关的问题.但凡遇到这种问题,是指3个方面的数据不丢失,即:producer consumer 端数据不丢失  b ...