来源:自学PHP网 时间:2015-02-05 11:34 作者: 阅读:次
[导读] 浅析Web数据存储-Cookie、UserData、SessionStorage、WebSqlDatabase 的使用方法。...
浅析Web数据存储-Cookie、UserData、SessionStorage、WebSqlDatabase 的使用方法。
Cookie 它是标准的客户端浏览器状态保存方式,可能在浏览器诞生不久就有Cookie了,为什么需要Cookie 这个东东?由于HTTP协议没有状态,所以需要一个标志/存储来记录客户浏览器当前的状态,保证客户浏览器和服务器通讯时可以知道客户浏览器当前的状态。Cookie就是记录这个状态的容器,Cookie在每次请求的时候都被带回到服务器,从而保证了Server可以知道浏览器当前的状态,由于Cookie会被带回到Server,所以Cookie的内容不能存太多,最多不能超过4K,4K 限制的介绍 http://ec.europa.eu/ipg/standards/cookies/index_en.htm A browser is only required to store up to 300 cookies overall and maintain only the last 20 from each domain. The maximum size of a cookie is 4K of disk space. 但是在一些场景下可能需要存储超过4K或者更多的数据,但是这些数据不用在每次请求的时候被带回到服务器,只要能在客户的浏览器上保存住,并且可以方便的被Javascript读写就可以了,这种需求尤为在中大型RIA的应用场景下更加的迫切,部分数据放在客户浏览器,节约带宽,提高浏览速度。HTML5标准已经替我们想到了满足这种需求的方案:sessionStorage , webSqlDatabase, 微软的IE 有 userData 方案。
Security Alert:For security reasons, a UserData store is available only in the same directory and with the same protocol used to persist the store.
userData可以在同目录同协议下相互访问,长期存储在客户机器上。最大存储空间也增大了很多。userData需要绑定到一个Dom元素上使用。在userData的method中有removeAttribute方法。经过测试代码发现removeAttribute方法好像不是很管用,需要使用像cookie过期的方式,才可以彻底的删除一个userData Attribute。
This specification introduces two related mechanisms, similar to HTTP session cookies [RFC2965], for storing structured data on the client side. Html5 sessionStorage Demo: http://html5demos.com/storage 复制代码 代码如下:function isIE() { return !!document.all; } function initUserData() { if (isIE()) document.documentElement.addBehavior("#default#userdata"); } function saveUserData(key, value) { var ex; if (isIE()) { //IE with (document.documentElement) try { load(key); setAttribute("value", value); save(key); return getAttribute("value"); } catch (ex) { alert(ex.message) } } else if (window.sessionStorage) { //FF 2.0+ try { sessionStorage.setItem(key, value) } catch (ex) { alert(ex); } } else { alert("Error occured in user data saving. your browser do not support user data."); } } function loadUserData(key) { var ex; if (isIE()) { //IE with (document.documentElement) try { load(key); return getAttribute("value"); } catch (ex) { alert(ex.message); return null; } } else if (window.sessionStorage) { //FF 2.0+ try { return sessionStorage.getItem(key) } catch (ex) { alert(ex) } } else { alert("Error occured in user data loading. your browser do not support user data.") } } function deleteUserData(key) { var ex; if (isIE()) { //IE with (document.documentElement) try { load(key); expires = new Date(315532799000).toUTCString(); save(key); } catch (ex) { alert(ex.message); } } else if (window.sessionStorage) { //FF 2.0+ try { sessionStorage.removeItem(key) } catch (ex) { alert(ex) } } else { alert("Error occured in user data deleting. your browser do not support user data.") } } userData和sessionStorage共同的特点就是:这两个对象都可以存储比cookie大的多的多内容。并且不会随每次请求带回到服务器端。但是根据Html5标准和测试发现userData和sessionStorage有很多地方是不同的。 下面是一个测试页面: 其中的 SetInsurance link 会操作javascript 在IE下用userData写数据, 在FF下用sessionStore写数据。在IE下的情况是:关闭IE或者重启机器写入的值都不会丢失。在FF下的情况很有意思:在本页面写入的值在本页面可以访问,在由本页面所打开的其它页面可以访问。但是就算本页面开着,在导航栏里输入地址,打开本页面,存入的值就不能访问了。在本页面存入的值,在它的父页面(打开这个页面的页面)是访问不到的。又看了看Html5标准。sessionStorage 的全名是:Client-side session and persistent storage of name/value pairs 意思估计是存储在Client的内容是有session 会话的,存储的值由session会话所维系,一旦session会话中断或者丢失,存入的值也就随之消失了。所以当页面没有session(父页面,由地址栏打开的页面),是取不到值的。当FF关闭或者重启机器必然也就取不到值了。
From W3C: "...an API for storing data in databases that can be queried using a variant of SQL" 不知道 HTML 5 的 SQLDB 会被浏览器支持的怎么样, 不过sessionStorage看上去已经可以基本满足需求了。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com