全面对比所有的存储技术

服务端存储的方法

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。

cookie和session的区别: 
1、cookie数据存放在客户的浏览器上,session数据放在服务器上 
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session 
3、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie 
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie 
5、建议将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中 
6、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息 
7、session中保存的是对象,cookie中保存的是字符串 
8、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的

客户端存储的方法 (所有的客户端存储都有一个原则:读写的数据必须要同域)

参考 代码

æ°æ®å­å¨åå±åå²

1.cookie

存储在客户端,用来与服务端进行交互,作为http规范的一部分,大小限制为4kb,在设置的过期时间之前是有效的

优点:兼容性好

缺点:操作繁琐,只能存简单的数据,还会过期,站点设置httponly的话,JS就不无法操作Cookie了

2. Web Storage

WebStorage是HTML5中为WebApplication提供一种存储的API,目前主流的新版本的浏览器都支持,当然IE789你就没有办法了。WebStorage主要分成localStorage和sessionStorage两种。

sessionStorage 是个全局对象,它维护着在页面会话(page session)期间有效的存储空间。只要浏览器开着,页面会话周期就会一直持续。当页面重新载入(reload)或者被恢复(restores)时,页面会话也是一直存在的。每在新标签或者新窗口中打开一个新页面,都会初始化一个新的会话。

localStorage也是一个全局变量,它的生命周期比sessionStorage长。它是一个持久化的本地数存储,除非主动删除数据,不然数据永远不会过期

localStorage和sessionStorage都继承自Storage因此它们的用法相同。

Web Storage对比cookie

webstorage是为了更大容量存储设计的,cookie的大小是受限的,并且每次请求一个新的页面的时候cookie都会被发送过去,无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用

除此之外,web storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。但是Cookie也是不可或缺的,cookie的作用是与服务器进行交互,作为http规范的一部分而存在,而web storage仅仅是为了在本地存储数据而生

3.IndexedDB

IndexedDB是一种基于Javascript对象继承的数据库,它支持事务,同时支持异步和同步读写。IndexedDB中可以存入对象,当然对象要能够结构化克隆(structured clone),同时它还提供索引功能,极大地提高了搜索的效率。通常来说IndexedDB的大小是没有限制,当大小超过50MB的时候,浏览器会弹出对话框来询问用户是否增加数据的大小。

优点:支持事务,支持索引,可以存入对象,效率也不错。

缺点:使用有些麻烦,上手需要一定时间。

猜你喜欢

转载自blog.csdn.net/weixin_37719279/article/details/81382878