Open chenqunfeng opened 6 years ago
cookie存放在客户端,一般存放在硬盘中。 cookie内容主要包含:名字,值,过期时间,域,路径,secure(设置为true的话,表示该cookie只会在https协议下进行传输),httponly,SameSite(chrome51之后的特性,有Strict和Lax模式)。最大大小为4KB。 其中过期时间表示cookie的作用有效时间,若不设置该时间,则该cookie为会话cookie,不存放在硬盘中而是存放在内存中,表示其生命周期为浏览器会话期间,关闭浏览器该cookie也会消失。 其中域和路径表示cookie的作用范围。
因为cookie的域和路径表示其作用范围,所以当我们的静态资源都是存放在其作用范围内时,在传输过程中都会带上该cookie;为了降低传输成本和服务器压力,我们可以把静态资源存放在作用范围之外,例如使用CDN。
因为cookie是可以轻易被篡改的,从而会造成冒名顶替的问题。虽然设置cookie的httponly为true可以在一定程度上保证cookie的安全,但是并不是万能的,黑客只要不通过http来获取cookie而是通过抓包便没有办法了。为了处理这个问题,我们可以通过MD5加密cookie内容+密钥来生成一段签名,例如将要传输的是username=cqf,那么我们可以在其后带上签名内容username=cqf|signature,服务器收到cookie后先根据内容+密钥来生成签名验证签名是否准确,以防止cookie篡改。
session存放在服务器,类似散列表的格式,每个session都通过一个sessionID对应一个cookie。 客户端发起请求时,会带上sessionID,若没有sessionID,则服务端会新建一个sessionID并在响应中返回。
一般session有几个常用的存放位置:内存、MongoDB、redis。 其中,内存不是一种持久化的方案,只要程序重启便会消失,而且当session量变大以后也会消耗内存,所以一般都不会使用这种方案;而MongoDB和redis都是DB方面的持久化的方案,不过在应用方面更多会选择redis。
WebStorage指的是html5提出的localStorage和sessionStorage,都是存放在客户端,大小一般为5M左右。
是本地持久化存储,只要不手动清除,则会一直存在。其存储结果虽然为字符串,但是也可以通过JSON的转化为Object或Array来使用。
是会话存储,顾名思义,当会话结束时,便会清除,具体的清除时机为浏览器关闭的时机,也即会话结束。其存储结果虽然为字符串,但是也可以通过JSON的转化为Object或Array来使用。
Cookie
cookie存放在客户端,一般存放在硬盘中。 cookie内容主要包含:名字,值,过期时间,域,路径,secure(设置为true的话,表示该cookie只会在https协议下进行传输),httponly,SameSite(chrome51之后的特性,有Strict和Lax模式)。最大大小为4KB。 其中过期时间表示cookie的作用有效时间,若不设置该时间,则该cookie为会话cookie,不存放在硬盘中而是存放在内存中,表示其生命周期为浏览器会话期间,关闭浏览器该cookie也会消失。 其中域和路径表示cookie的作用范围。
cookie隔离
因为cookie的域和路径表示其作用范围,所以当我们的静态资源都是存放在其作用范围内时,在传输过程中都会带上该cookie;为了降低传输成本和服务器压力,我们可以把静态资源存放在作用范围之外,例如使用CDN。
cookie防篡改
因为cookie是可以轻易被篡改的,从而会造成冒名顶替的问题。虽然设置cookie的httponly为true可以在一定程度上保证cookie的安全,但是并不是万能的,黑客只要不通过http来获取cookie而是通过抓包便没有办法了。为了处理这个问题,我们可以通过MD5加密cookie内容+密钥来生成一段签名,例如将要传输的是username=cqf,那么我们可以在其后带上签名内容username=cqf|signature,服务器收到cookie后先根据内容+密钥来生成签名验证签名是否准确,以防止cookie篡改。
Session
session存放在服务器,类似散列表的格式,每个session都通过一个sessionID对应一个cookie。 客户端发起请求时,会带上sessionID,若没有sessionID,则服务端会新建一个sessionID并在响应中返回。
session存放位置
一般session有几个常用的存放位置:内存、MongoDB、redis。 其中,内存不是一种持久化的方案,只要程序重启便会消失,而且当session量变大以后也会消耗内存,所以一般都不会使用这种方案;而MongoDB和redis都是DB方面的持久化的方案,不过在应用方面更多会选择redis。
WebStorage
WebStorage指的是html5提出的localStorage和sessionStorage,都是存放在客户端,大小一般为5M左右。
localStorage
是本地持久化存储,只要不手动清除,则会一直存在。其存储结果虽然为字符串,但是也可以通过JSON的转化为Object或Array来使用。
sessionStorage
是会话存储,顾名思义,当会话结束时,便会清除,具体的清除时机为浏览器关闭的时机,也即会话结束。其存储结果虽然为字符串,但是也可以通过JSON的转化为Object或Array来使用。