Cookiecss
Session前端
cookie一般用于先后端进行身份验证的时候,标记用户的身份不同凡响。说到cookie的做用,为何要使用cookie,那就可能会说到http了,由于http是一种无状态的协议,无状态(你们能够理解为我上一秒登录完网站,下一秒服务器再次收到访问网站请求的时候,它不认识你了,须要再次登录,也能够说是不知道哪一个客户端向服务器发送了请求)这就会致使一种状况出现:某个同窗刚登录完淘宝,跳转到购物车界面,加入完购物车的时候,须要再次登录,想一想这种用户体验真的是太差了~因此Cookie诞生了。web
可是cookie不是很安全,由于别人能够分析存放在本地的cookie并进行恶意使用,天然而然咱们想到了网站漏洞XSS攻击(跨站脚本攻击),它的原理:攻击者往web页面里插入恶意的脚本代码(css,js)当用户浏览该页面时,嵌入其中的脚本代码会执行,从而达到恶意攻击用户的目的,从而盗取cookie,破坏页面结构,这就须要咱们在cookie字段中加入HttpOnly属性,保护好cookie,或者咱们能够利用session,在服务器端用session去管理cookie面试
session是由cookie进行标记的,将cookie里的数据保存在服务器端,当须要记住用户时,好比前面说的登录,在服务器端会设置一个响应头Set-Cookie,返回给客户端,例如:Set-Cooki:SESSIONID=654321;客户端接收到这个响应后,此后每次发送一个请求,浏览器都会自动带上Cookie请求头这个小饼干,小印记,对应内容则是Cookie:ESSIONID=654321,在服务器端存有session,之后每次客户端发送请求的时候都会与服务器端的session进行对比,若是对上了,就能够识别是哪一个客户端发来的请求了。后端
由于session在服务器端存储,会出现什么的状况呢?当一年一度的淘宝双11来临时,淘宝官网无疑会被大量访问,当同一个域名被大量访问时,一个域名下的众多服务器保存着一样的session,这样session所占的内存不可思议,这样会下降服务器的性能,考虑到服务器的性能优化
解决办法:
(1)共享session
将session提取出来,集中存放管理
(2)token令牌验证
客户端与服务器端的通讯服务不须要存储,当进行通讯交互时,能够经过解析token里面的信息来判断是否登录。token里面能够携带cookie解析出来的信息,这样每次请求时添加一个token验证,就能够达到优化服务器性能的效果了。
浏览器
须要注意的是,不是什么数据都适合放在 Cookie、localStorage 和 sessionStorage 中的。使用它们的时候,须要时刻注意是否有代码存在 XSS 注入的风险。
我的建议:
缓存
特性 |
|
|
|
---|---|---|---|
数据的生命周期 | 通常由服务器端生成 |
一旦存入, |
仅在当前会话有效, |
存放数据大小 | 4KB |
通常为5MB |
通常为5MB |
与服务器端通讯 | 每次都会携带在同源 |
仅在客户端中保存 |
仅在客户端中保存 |
用途 | 服务器端生成, |
用于浏览器缓存数据 |
用于浏览器缓存数据 |
setItem存储value
用途:将value存储到key字段
{ sessionStorage.setItem("key", "value"); localStorage.setItem("site", "lsh"); }
getItem获取value
用途:获取指定key本地存储的值
{ var value = sessionStorage.getItem("key"); var site = localStorage.getItem("site"); }
removeItem删除key
用途:删除指定key本地存储的值
{ sessionStorage.removeItem("key"); localStorage.removeItem("site"); }
clear清除全部的key/value
用途:清除全部的key/value
{ sessionStorage.clear(); localStorage.clear(); }