浅谈web存储

1、先来说说之前的客户端存储吧~在html5出来之前~客户端存储主要是使用cookie~不过这种古老的方式存在着好一些弊端~举例如下:

可以存储的数据的大小受到限制~官方指出一个域名下最多可以存储4k的数据(有点少吧~~)

cookie的数据放到了http请求头上~这样不仅使得http请求头变得臃肿~过多的cookie会使请求越来越慢~同时还带来了安全的问题~这玩意默认是明文的

同时注意cookie是会过期的~

2、还有一种存储方式是userData~但是这个只有ie支持~考虑到平台的限制~此处不再赘述~

3、html5出来后~web存储克服了之前cookie的缺陷~比如大小限制从原来的4k编程了5M~也有很好的跨平台的支持~下面我们来看下其主要的方式:

sessionStorage/localStorage:二者的主要区别是sessionStorage存储的数据在本次会话窗口被关闭后就没有了~而localStorage中存储的数据是长期存在的~除非手动删除~同时~同一站点下的不同的会话窗口(注意~是同一站点~不是同域名~localStorage的数据就算是同一域名下的子域名也不可以共享)可以共享localStorage中存储的数据~再者~Safari浏览器还支持localStorage的一个事件~叫storage事件~这个事件是当localStorage中存储的数据发生变化时被触发的~利用这个事件~同一站点下的不同窗口中localStorage的数据就可以实现无刷新的同步啦~比如我打开两个京东的页面~在第一个页面把商品加入购物车~第二个页面无需刷新~购物扯中的数据就会自动更新~无奈~这么棒的功能目前只有Safar支持~~还有一点需要注意的是这个事件虽然在losalStorage中提出~但这个事件的拥有着是window对象~只要页面添加了这个事件~window会自动在localStorage中存储的数据发生变化时触发同一站点的窗口~而不是同一站点的会话窗口会被忽略~

应用:使用localStorage实现图片的存储方法:

js代码:

function saveImg() {
            var myImg = document.createElement("img");
            myImg.src = "http://127.0.0.1/x.jpg";

            //当图片加载完成的时候触发回调函数
            myImg.addEventListener("load", function () {
                var imgCanvas = document.createElement("canvas"),
                imgContext = imgCanvas.getContext("2d");
                // 确保canvas元素的大小和图片尺寸一致
                imgCanvas.width = this.width;
                imgCanvas.height = this.height;

                // 渲染图片到canvas中
                imgContext.drawImage(this, 0, 0, this.width, this.height);

                // 用data url的形式取出
                var imgAsDataURL = imgCanvas.toDataURL("image/png");

                // 保存到本地存储中
                try {
                    localStorage.setItem("elephant", imgAsDataURL);
                }
                catch (e) {
                    console.log("Storage failed: " + e);
                }
            }, false);
        }

        function getImg() {
            var imgData = localStorage.getItem("elephant");
            var imgObj = document.createElement("img");
            imgObj.src = imgData;
            document.body.appendChild(imgObj);
        }

注意:因为本地存储只能存储字符串~所以这里使用了canvas来对图片数据做一个转换~但是canvas有一个安全策略~当请求的的图片和当前的页面不是同一个域名时会报错~所以这里我使用xampp搭建了一个服务器~把图片和测试页面都丢进去~以此来测试页面的运行~

另外注意一下~使用localStorage前强烈建议先判断当前浏览器是否支持~网上指出的一个通用的方法是if(window.localStorage)~但是这里建议使用一种更为健全的方式:即使用上面的方式~直接localStorage.setItem一下~并把这句放到try-catch块中去执行~如果捕获到异常~就说明当前的浏览器不支持localStorage~那么我们直接就换别的方法来做这个存储啦

下面谈谈localStorage的缺陷~一个是它没有过期这么个说法~只要不手动删除~那数据将会永久保存~如果业务中涉及到数据保存需要设置期限~那我们可以自己封装相应的数据对象到localStorage中来实现~下面是一个实现带过期效果的localStorage的demo

function saveDataWithDate(key, value) {
            var currentTime = new Date().getTime();
            try    {
                localStorage.setItem(key, JSON.stringify({data: value,time: currentTime}));
            }catch(e) {
                console.log("Storage failed: " + e);
            }
        }

        function getDataWithDate(key, lastTime) {
            //lastTime为期限
            var data = localStorage.getItem(key);
            var dataObj = JSON.parse(data);
            console.log(dataObj.time);
            if(new Date().getTime() - dataObj.time > lastTime) {
                console.log("数据已过期");
            }else {
                console.log("data is:" + dataObj.data);
            }
        }
时间: 2024-10-23 09:36:41

浅谈web存储的相关文章

浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 全Socket层(SSL)等等,目前互联网主要使用它做静态资源服务器,也可以做代理服务器转发请求(如:图片链等),结合tomcat等 servlet容器处理jsp.1.2.ngnix     —— 俄罗斯人开发的一个高性能的 HTTP和反向代理服务器.由于Nginx 超越 Apache 的高性能和稳

【架构】浅谈web网站架构演变过程

浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate.maven+spri

浅谈Web自适应

浅谈Web自适应 2016-08-13 前端大全 前端大全 (点击上方公众号,可快速关注我们) 来源:卖烧烤夫斯基 链接:www.cnblogs.com/constantince/p/5708930.html 前言 随着移动设备的普及,移动web在前端工程师们的工作中占有越来越重要的位置.移动设备更新速度频繁,手机厂商繁多,导致的问题是每一台机器的屏幕宽度和分辨率不一样.这给我们在编写前端界面时增加了困难,适配问题在当下显得越来越突出.记得刚刚开始开发移动端产品的时候向设计MM要了不同屏幕的设计

浅谈密码存储安全

前言 用户信息泄露事件层出不穷,百度或谷歌输入"密码泄露",搜出来的泄密门更是让人目瞪口呆:从小公司到大公司,从明文存储到普通的哈希加密.作为一个IT从业者,我深刻感受到"得用户者得天下",尤其在互联网+盛行的趋势下.密码存储作为软件服务系统基础架构中不可缺少的一部分,越来越多的受到开发者的重视.对于一个服务,如果信息安全部分出问题,我想没有必要进一步去做用户体验的提升,性能的优化.进而也不可能获取大用户的青睐.还是那句话:出来混,迟早要还的. 本人并非密码学出生,

浅谈web前端开发

有部分同学和朋友问到过我相关问题.利用周末我就浅浅地谈谈我对web前端开发的理解和体会,仅仅能浅浅谈谈,高手请自己主动跳过本篇文章. 毕竟我如今经验并非非常足,连project师都算不上,更不用说大牛了.今天也不谈技术.技术非常多人比我掌握得更好,也大同小异.可是每一个人的理解体会是不一样的. 对前端开发的三个整体理解和体会 我对前端开发的整体体会有三: 第一:杂而难,难度甚至超过了一般的后台开发,假设有人认为前端开发简单仅仅能说明他还没有入门. 第二:web前端开发正在向响应式和移动端方向大步

浅谈MySQL存储引擎-InnoDB&MyISAM

存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见的InnoDB和MyISAM两种存储引擎进行讨论.本文中关于数据存储形式和索引的可以查看图解MySQL索引 MySQL逻辑架构图: InnoDB存储引擎 InnoDB是默认的事务型存储引擎,也是最重要,使用最广泛的存储引擎.在没有特殊情况下,一般优先使用InnoDB存储引擎. 1??.数据存储形式

浅谈WEB安全性(前端向)

相信进来的时候你已经看到alert弹窗,显示的是你cookie信息(为配合博客园要求已删除).单纯地在你的客户端弹出信息只是类似于迫使你在自己的房间脱衣服——没人看得到,自然也不算啥恶意行为.那么如果我把你的信息通过脚本发送到我的服务器保存起来呢?先放心,我不打算这么做,也没那笔闲钱去购置一个服务器来做羞羞的事情,也不希望博客园把我这地盘给封掉了. 如同标题所写的,今天要聊的是WEB安全机制,但这“前端”二字倒是说的狭义了些,安全的问题大部分还是更依赖于后端的过滤和拦截措施,后端的朋友如果感兴趣

浅谈Web安全-SQL注入

简单的说一下我对Web安全的了解,主要是代码注入方面. SQL注入 简介: SQL攻击(SQL injection),简称为注入攻击,是发生于应用程序数据库层的安全漏洞.简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵. 简单的说,所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.例如:如果用户在

浅谈web网站架构演变过程

前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate.maven+spring+springmvc+m