[TOC]

Session 、Cookies 、Token

参考:https://cloud.tencent.com/developer/article/1704064
参考:https://zhuanlan.zhihu.com/p/63061864
参考:https://zhuanlan.zhihu.com/p/504924068
Http协议是一种无状态协议,每次服务端接收到客户端的请求,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session和Cookie的主要目的是为了弥补HTTP的无状态性。

Session

客户端访问服务端时,服务端会为这次请求开辟一块内存空间,创建Session对象存储请求信息,存储结构为ConcurrentHashMap。Session弥补了HTTO无状态特性,服务器可以利用Session存储客户端在统一会话期间的一些操作记录。

创建Session对象时,同时生成SessionId,并通过“Set-Cookie:JSSESIONID=XXXXX”命令向客户端要求设置Cookie的响应,客户端收到响应后会在本机客户端设置一个JSESSIONID=XXXXX的Cookie信息,改Cookie过期时间为浏览器会话结束时间。

当该客户端再次访问服务端时,请求头会携带改Cookie信息,服务端读取请求头中的Cookie信息,获取JSESSIONID的信息,得到请求的SessionId,根据SessionId是否相同判断是否为同一次会话。

Cookies

Http协议中Cookie包含Web Cookie 和 浏览器Cookie ,Cookie是服务器发送到客户端的一小块数据。服务器发送到客户端的Cookie,客户端会进行存储,并与下一次请求一起发送到服务器。通常用于判断两个请求是否来自同一个客户端。

  • SessionCookies :会话Cookie存储在内存中,永远不会写入磁盘,当浏览器关闭时Cookie丢失
  • Persistent Cookies:持久性Cookie,设置了有效期,在到达有效期是,Cookie将从磁盘删除,而不是像会话Cookie一样关闭客户端时删除。
  • Cookie的Secure 和 HttpOnly标记:安全的Cookie需要经过Https协议经过加密的方式发送到服务器。HttpOnly是微软对Cookie做的扩展,指定Cookie是否可以通过客户端脚本访问;如果Cookie中没有设置HttpOnly为true,可能导致ookie被窃取。
  • Cookie的作用域:Domain和Path标识定义的Cookie的作用域,即Cookie应该发送给那些URL。

    • Domain:标识那些主机可以接收Cookie,若不指定,默认当前主机,如果指定则一般包含子域名。
    • Path:设置资源地址是否接收Cookie

      Token

      令牌,是用户身份验证方式。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)。
  • Token是一些信息的集合

  • Token中包含足够多的信息,以便后续请求中减少查询数据的几率
  • 服务端要对cookie和Http Authrorization Header进行Token信息检查
  • 基于上一点,服务端可以用一套token认证代码来面对客户端
  • Token是无状态、可扩展、多平台跨域的

    同源、跨域

    同源

    域名、协议、端口不同都会造成不同源。
    浏览器的同源策略是一种安全功能,同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。
    例:a.com下的js脚本采用ajax读取b.com里面的文件数据是会报错的。

    跨域

    jsonp跨域访问原理:
    Web页面上调用js文件时则不受是否跨域的影响,拥有“src”这个属性的标签都却拥有跨域的能力,