在HTML5出现之前,如果开发者需要在客户端存储少量的数据,只能通过cookie来实现,但是cookie存在几个不足点:
每个域名下cookie的大小限制在4KB。
cookie会包含在每个http请求中,这样会导致发送重复的数据。
cookie在网络传输过程中没有加密,存在安全隐患。
在HTML5新增了Web storage功能,Web Storage官方建议为每个网站是5MB,能存储比cookie更多的数据,并且具有比cookie更强大的功能。Web Storage现在已经得到了Firefox、Opera、Chrome、Safari各主流浏览器的支持。
Web Storage又分为Session Storage和Local Storage:
Session Storage:与session类似,Session Storage保存的数据生存期限与Session期限相同,用户Session结束时,Session Storage保存的数据也就消失了。
Local Storage: Local Storage保存的数据一直在本地,除非用户或程序显式地清楚,否则这些数据会一致存在。
1.服务器端和客户端的存储
服务器端:
1. 内存存储(临时)application session request pageContext
2. redis缓存,队列,16w次每秒,可持久化,可缓存
3. 数据库持久化 mysql(23秒每次) mssqlserver oracle db2...
客户端:
1. cookie以文件的形式明文存储数据,不安全,最大存储单个数据4kb
2. storage: 存储功能,相当于小型的数据库.(存储功能是在浏览器中)
"永久保存": 只要不对浏览器进行清理,本地存储会永久保存数据.
2.localStorage/sessionStorage
使用HTML5可以在本地存储用户的浏览数据。
早些时候,本地存储使用的是 cookie。但是Web存储需要更加的安全与快速。
这些数据不会被保存在服务器,只用于用户请求网站数据情况。
可以存储大量的数据,而不影响网站的性能。
数据以 键/值 对存在,web网站的数据只允许该网页访问使用。
只能存储String类型
key:String
value:Object
1.本地存储器
2.会话存储器(属于本地存储器)
区别:
localStorage 和 sessionStorage 生命周期不同
localStorage永久有效
sessionStorage跟会话有关
实际开发中发现跟会话没有关系,当浏览器关闭之后,失效
api:
1、存储:localStorage.setItem(key,value)
如果key存在时,更新value
2、获取:localStorage.getItem(key)
如果key不存在返回null
3、删除:localStorage.removeItem(key)
一旦删除,key对应的数据将会全部删除
4、全部清除:localStorage.clear()
某些时候使用removeItem逐个删除太麻烦,可以使用clear,执行的后果是会清除所有localStorage对象保存的数据
5、遍历localStorage存储的key
.length 数据总量,例:localStorage.length
.key(index) 获取key,例:var key=localStorage.key(index);
6、存储JSON格式数据
JSON.stringify(data) 将一个对象转换成JSON格式的数据串,返回转换后的串
JSON.parse(data) 将数据解析成对象,返回解析后的对象
备注:localStorage存数的数据是不能跨浏览器共用的,一个浏览器只能读取各自浏览器的数据,储存空间5M。
3.总结
存储/取出数据:
localstorage.name = "tanjw"//可以利用json的方法将对象转为字符串,方便存取使用。
localstorage.name //就取出了
有效期:
localstorage,永久存储(除非手动删除掉)
seesionstorage,临时存储,窗口关闭就被自动删除
作用域:
localstorage:要满足同源策略
seesionstorage除了受到上述限制外,还会受到文档源(窗口,即不是同一窗口不能访问,即使是同一文件)的限制
API:
localstorage.setItem(key,value);
localstorage.getItem(key);
localstorage.remove(key);
localstorage.clear();