Cookie、Session、Token有什么区别

Cookies

  1. 什么是cookie
    HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上,通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态,Cookie使无状态的HTTP协议记录,向稳定的状态信息成为了可能。

  2. cookie的作用

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)
    Cookie曾一度用于客户端数据的存储,因为当时并没有其它合适的存储办法,但现在随着现代浏览器开始支持各种各样的存储方式,Cookie渐渐被淘汰,由于服务器指定Cookie后,浏览器的每次请求都会携带Cookie数据,这样会带来额外的性能开销(尤其是在移动环境下),新的浏览器API已经允许开发者直接将数据存储到本地,如使用web strorage API(本地存储和会话存储)或IndexedDB。
  1. cookie的版本
  • 网景版cookie:网景公司技术人员发明了cookie,并制定了相关的规则标准。
  • RFC2109版cookie:网景竞争对手以网景版cookie作为基础对cookie进行的标准化。
  • RFC2965版cookie:定义了一个cookie的扩展版本,引入了Set-Cookie2首部和Cookie2首部。
  • RFC6265版cookie:将网景公司的cookie标准作为业界事实标准,重新定义cookie标准后的产物。
  • 目前主流的cookie版本:目前使用最广泛的cookie标准不是上述任何一种,而是在网景公司制定的标准上进行扩展后的产物。
  1. cookie的创建
    当服务器收到HTTP请求时,服务器可以在响应首部里面添加一个Set-Cookie选项,浏览器收到响应后通常会保存下Cookie,之后对该浏览器每一次请求中都通过Cookie请求首部将Cookie信息发送给服务器,另外,Cookie的过期时间、域、路径、有效期、适用站点都可以根据需求来定。
    一个简单的Cookie可能像这样:Set-Cookie:<cookie名>=<cookie值>
    在这里插入图片描述

  2. cookie的类型

  • 会话期Cookie:会话期Cookie是最简单的Cookie,浏览器关闭之后它会自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间或者有效期,需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie也会被保留下来,就好像浏览器从来没有关闭一样,
  • 持久性Cookie:和关闭浏览器便失效的会话期Cookie不同,持久性Cookie可以指定一个特定的过期时间或有效期。当Cookie的过期时间被设定时,设定的日期和时间只与客户端相关,而不是服务端
  • 第三方Cookie:每个Cookie都会有与之关联的域,如果Cookie的域和页面的域相同,那么我们称这个Cookie为第一方Cookie,如果Cookie的域和页面的域不同,则称之为第三方Cookie。一个页面包含图片或存放在其他域上的资源时,第一方的Cookie也只会发送给设置它们的服务器,通过第三方组件发送的第三方Cookie主要用于广告和网络追踪,这方面可以看谷歌使用的Cookie类型,大多数浏览器默认允许第三方Cookie,但是可以通过附件组件来阻止第三方Cookie。
    6.cookie的属性
    Secure和HttpOnly属性:标记为Secure的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。但即便设置了Secure标记,敏感信息也不应该通过Cookie传输,因为Cookie有其固有的不安全性,Secure标记也无法提供确实的安全保障。从Chrome52和Firefox52开始,不安全的站点无法使用Cookie的Secure标记。为了避免跨域脚本(XSS)的攻击,通过JavaScript的Document.cookie API无法访问带有HttpOnly标记的Cookie,它们应该发送给服务端,如果包含服务端Session信息的Cookie不想被客户端javascript脚本调用,那么就应该设置HttpOnly标记。
    作用域属性:Domain和Path标记定义了Cookie的作用域,即Cookie应该发送给哪些url。Domain标记指定了哪些主机可以接受Cookie,如果不指定,默认为当前文档的主机(不包含子域名),如果指定了Domain,则一般包含子域名。例如,若设置Domain=mozilla.org,则Cookie也包含在子域名中(如developer.mozilla.org)。path标识指定了主机下的哪些路径可以接受Cookie(该url路径必须存在于请求url中),以字符%x2f("/")作为路径分隔符,子路径也会被匹配。
    例如,设置path=/docs,则一下地址都会匹配:
/docs
/docs/web/
/docs/web/http

SameSite Cookies:允许服务器要求某个cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击,SameSite Cookies是相对较新的一个字段,所有主流浏览器都已经得到支持。例如:Set-Cookie:key=value;SameSite=Strict

SameSite可以有下面三种值:
None:浏览器会在同站请求,跨站请求下继续发送Cookie,不区分大小写。
Strict:浏览器将只发送相同站点请求的cookie(即当前网页url与请求目标url完全一致)如果请求来自与当前location的url不同的url,则不包括标记为Strict属性的cookie。
Lax:在新版本浏览器中,为默认选项,Same-site cookies 将会为一些跨站子请求保留,但只有当用户从外部站点导航到url时才会发送,如link链接。

session

1.session同步问题

  • session复制
  • 客户端保存session
  • 固定用户访问服务器:IP HASH,业务数据 hash
  • 共享存储

Token

  • 支持跨域
    1.token的种类
  • access_token
  • refresh_token

猜你喜欢

转载自blog.csdn.net/weixin_45517802/article/details/113757322