先说下Cookie的产生
由服务器产生—典型例子:sessionID
具体过程如下:
客户端的某次请求—>发送给服务器;
服务器产生一个Cookie,附价在HTTP响应头中,传递给客户端浏览器—>浏览器保存Cookie
客户端之后的所有请求,都会把Cookies附加在HTTP请求头中,传递给服务器—>服务器校验有用的Cookie信息
有客户端产生—典型例子:记住用户名
由客户端产生的Cookie与服务器产生的Cookie性质一样,也可以保存在本地,也会被传递到服务器
下面说下Session的简介
Session一般翻译为会话,进行某些获得持续的一段时间,从打开某网站到关闭浏览器,这是一个会话
Session一定是服务端创建的
服务器创建的Session标识是全局唯一的,一串字符
服务器创建的Session标识一般存储在服务器[内存]中
Session标识被发往浏览器时间,会设置过期时间为1970年1月1日前的1秒,表示的是一个过去式
服务器创建的Session标识通过HTTP响应头中的set-Cookie发送给客户端
浏览器拿到Session标识后,会临时存储,因为它是一个会话Cookie,所以浏览器关闭,它就消失

Session销毁
Session 有超时设置,如果到了超时时间,系统会自动把Session注销
Session 有注销机制,调用invalidate方法,可以注销Session
通常关闭应用(Tomcat),所有Session都会被注销,关闭服务器
注:关闭浏览器不会注销Session 的。
Session + Cookie 实现登录

(一)、Java 项目通常解决方案
当浏览器发送请求时,服务器会自动判断浏览器是否有带SessionID。
如果没有带SessionID,立马生成一个全新的SessionID给它
如果有带SessionID,会校验服务器内存是否存在,如果不存在,则立马生成一个全新的给它
如果有带SessionID,会校验服务器内存是否存在,如果存在,则不处理
之后的每次请求,都会刷新服务端SessionID的有效期

---------到这里为止,不管用户是否已经登录,客户端都有可以用的SessionID-------------

当输入正确的用户名、密码,点登录按钮,如果登录成功。
程序员会把SessionID 存入到另外一个【内存变量中2】容器中
之后的每次请求,权限拦截器都会拦截到你的SessionID,并和内存中的【内存变量中2】进行查找,如果发现查找不到,则会帮你重定向到登录界面。
当客户端主动注销,服务器会调用invalidate方法注销服务器上的Session,并重定向到登录界面,又会产生新的SessionID

(二)、其他项目解决方案
当输入正确的用户名、密码,点登录按钮,如果登录成功。
服务器会生成一个SessionID 返回给客户端,客户端浏览器存到Cookie
当用户主动注销,【服务器端】会同时删除【服务端SessionID】和【客户端cookie】

解决的问题:
session保存在内存中,当用户量大的时候会对服务器增加很大的压力
当有多台服务器做负载均衡时,能减轻服务器的压力,但session需要在多台服务器间来回复制
当session共享到一台服务器上时,能避免session的复制,但如果这台服务器发生了问题,所有人都需要重新登录

Token介绍:
生成原理:
Token 由三部分组成,第一部分:头部(Header),第二部分:荷载(Payload )第三部分:签名(Signature)
第一部分,包含的数据为:token类型、加密方式,数据用base64加密
第二部分,包含登录的用户信息,如用户名、用户id等,但是不能包含敏感信息,数据用base64加密
第三部分,为签名,它的值=【Header + Payload 】用:密钥进行HMAC-SHA256 加密。

举例:
第一部分:数据为:{“alg”:“HS256”} base64加密后为:eyJhbGciOiJIUzI1NiJ9
第二部分:数据为:{“jti”:“fancl”,“sub”:“fancl”,“iat”:1570675025} base64加密后为:
eyJqdGkiOiJmYW5jbCIsInN1YiI6ImZhbmNsIiwiaWF0IjoxNTcwNjc1MDI1fQ
第三部分:【eyJhbGciOiJIUzI1NiJ9+eyJqdGkiOiJmYW5jbCIsInN1YiI6ImZhbmNsIiwiaWF0IjoxNTcwNjc1MDI1fQ】
用密钥:JYJ5Qv2WF4lA6jPl5GKuAG 进行加密,得出来的结果为签名:oUJMDTP4UcM7sDBin42kxOLfn53j37Hx5gqhtcXCilw

最终返回到客户端的Token为:
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJmYW5jbCIsInN1YiI6ImZhbmNsIiwiaWF0IjoxNTcwNjc1MDI1fQ.oUJMDTP4UcM7sDBin42kxOLfn53j37Hx5gqhtcXCilw

校验原理:
客户端之后的请求,请求头都会带Token 到服务器
服务器从Token取出第一部分和第二部分,用【密钥】进行HMAC-SHA256 加密,结果和取出的第三部分比较。如果相同,表示客户端传递的Token 是没有被篡改的。
由于第二部分数据,包含用户信息,所以服务器知道请求的是哪个用户。

简易理解
【数据】采用【密钥】用【加密算法】生成【签名】
返回给客户端的Token=【数据】.【签名】
校验时,从客户端过来的Token中取出【数据】采用服务器的【密钥】用【加密算法】生成【新签名】
【新签名】 与 从Token中取出的【签名】,比较
比较一致,表示内容没有被篡改
base64在线加密解密网址:http://tool.oschina.net/encrypt?type=3

Token实现登录
通过用户名+密码 调用API接口
如果调用成功,服务端签发一个Token,并返回给服务端
客户端浏览器收到Token后,把它存起来,比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求,把Token中的数据取出来,和密钥再进行一次签名,这个签名和Token中的签名比较

Cookie和Session、token粗解相关推荐

  1. 2、cookie session token详解

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

  2. Cookie与 Session使用详解

    1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...

  3. (进阶篇)Cookie与 Session使用详解

    1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...

  4. php session 机制,Cookie、Session机制详解及PHP中Session处理

    会话机制 Cookie/Session: 在web应用中,常用的会话追踪机制是Cookie和Session.而Cookie是通过在浏览器里记录确定用户身份,Session在服务器端记录信息确定用户身份 ...

  5. cookie与session原理详解

    一. Cookie cookie:浏览器在电脑硬盘中开辟的一块空间,主要供服务器端存储数据. cookie中的数据是以域名的形式进行区分的. cookie中的数据是有过期时间的,超过时间数据会被浏览器 ...

  6. cookie和session的详解和区别

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  7. 会话技术(Cookie,Session)详解

    概念 功能 方式 概念 一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能 在一次会话的范围内的多次请求间,共享数据 方式 客户端会话技术:C ...

  8. session、cookie、token 详解

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我不用 ...

  9. 还分不清 Cookie、Session、Token、JWT?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金   作者:秋天不落叶 juejin.im/po ...

最新文章

  1. Windows客户端C/C++编程规范“建议”——指针
  2. PowerDesigner导出excel
  3. jQuery操作input改变value属性值
  4. LeetCode 1004.最长连续1的个数
  5. jvm 性能调优工具之 jstat
  6. Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays
  7. 2.12 主成分分析(上)
  8. Java与Cuda混合编程
  9. highstack的一个bug
  10. Linux包含一个名称是()的调试程序,开发一个 Linux 调试器(九):处理变量
  11. 更新--本地检查需要下载/删除的文件,然后做替换/删除,并重启
  12. python 开发工具_「干货」推荐一整套 Python 开发工具
  13. 前端每日实战:123# 视频演示如何用纯 CSS 创作一架双冀飞机
  14. 人工智能原理与方法作业1
  15. 实时时钟DS1302
  16. python爬虫抓文章_公众号文章抓取(python爬虫如何抓取微信公众号文章)
  17. 有对象的程序猿都是怎么写代码的
  18. JDBCDataSource
  19. ajax串数组包含双引号,解决AJAX请求中含有数组的办法
  20. invalid byte sequence for encoding utf8 0xcb 0xef

热门文章

  1. 告别单调的主妇,这三件好物,让妈妈变身精致美厨娘丨Fancy辣妈系列
  2. 这场秋季“保心战”,草晶华丹参破壁草本怎么能缺席?
  3. 箝口侧目的拼音及解释
  4. android preference-headers 字体颜色,android 批改preference中view属性(title,summary字体颜色等)...
  5. 风力发电机变桨滑环介绍
  6. ZBarReaderView屏幕旋转问题
  7. 广西师范大学第三次院级程序设计竞赛
  8. 千锋为你解读Android培训课程体系
  9. 辽宁省交通高等专科学校环境宿舍环境怎么样?
  10. Win7更改文件类型图标