Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HTML5 Web缓存&运用程序缓存&cookie,session

HTML5 Web缓存&运用程序缓存&cookie,session

作者头像
用户1149564
发布于 2018-01-11 10:04:51
发布于 2018-01-11 10:04:51
2.3K00
代码可运行
举报
文章被收录于专栏:Micro_awake webMicro_awake web
运行总次数:0
代码可运行

在介绍HTML5 web缓存前,来认识一下cookie和session:

session:

由于HTTP是无状态的,你是谁?你干了什么?抱歉服务器都是不知道的。

因此session(会话)出现了,它会在服务器上存储用户信息以便将来使用(比如用户名称,购物车购买商品等)。

但是session是临时的,用户离开网站将被删除。如果要永久存储信息,可以保存在数据库中!

session工作原理:为每个用户创建一个session id(核心!!!)。而session id是存储在cookie中的,也就是说如果浏览器禁用了cookie,那么session会失效!(但是可以通过其它方式实现,如:通过URL传递session id)

用户验证一般采用session。

cookie:

目的:网站标记用户身份而存储在本地客户端的数据(通常经过加密)。

  • 用户访问网页时,名字记录在cookie中;
  • 下次继续访问该网页时,可以从cookie中读取用户访问记录。

cookie会在同源的http请求携带(即使不需要),即在客户端和服务器之间来回传递!

cookie的数据大小不超过4k

cookie的有效期:设置的cookie有效时间之前一直有效,即使浏览器关闭!

localStorage & sessionStorage:

早期,本地缓存普遍使用的是cookie,但是web存储需要更安全、更快速!

这些数据不会保存在服务器上(存储在客户端),不会影响服务器性能!

sessionStorage和localStorage数据存储也有大小限制,但却比cookie大得多,可以达到5M甚至更大!

localStorage:没有时间限制的数据存储!

sessionStorage:由英文意思也可知,它是对session的数据存储,所以在用户关闭浏览器(标签页/窗口)后,数据被删除!

HTML5 web存储支持情况:

IE8以上,现代浏览器。

数据以键值对存储:

localStorage和sessionStorage都有以下几个方法:

  • localStorage.setItem(key,value):设置(保存)数据;相当于localStorage.key=value!
  • localStorage.getItem(key):获取数据
  • localStorage.removeItem(key):删除单个数据
  • localStorage.clear():删除所有数据
  • localStorage.key(index):获取某个索引的键值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>web storage</title>
 9 </head>
10 
11 <body>
12     <div id="test"></div>
13     <script>
14         if (typeof (Storage) != undefined) {
15             localStorage.name = 'xiao ming';
16             localStorage.setItem('name1', 'Apple');
17             document.getElementById('test').innerHTML = "you are: " + localStorage.name;
18             console.log("first:" + localStorage.name1 + "," + localStorage.key(0));
19             localStorage.removeItem('name1');
20             console.log("second: " + localStorage.name1);
21             console.log("third: " + localStorage.getItem('name'));
22             localStorage.clear();
23             console.log("last:" + localStorage.name);
24         } else {
25             document.getElementById('test').innerHTML = "更新浏览器吧!目前浏览器不支持stroage";
26         }
27         
28     </script>
29 </body>
30 
31 </html>

程序运行结果:

注意:键值对是以字符串保存的,根据需求应改变类型(比如做加法,变为Number型)。

HTML5运用程序缓存(Application Cache):

通过创建cache manifest文件,web运用可被缓存,并且无网络状态可以进行访问!

Application Cache优势:

  1. 离线浏览;
  2. 速度更快:已缓存资源加载更快;
  3. 减少浏览器负载:客户端将只从服务器下载或更新更改过的资源

支持情况:

IE10以上,现代浏览器。

使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 <!DOCTYPE html>
2 <html manifest="demo.appcache">
3 
4 </html>

注意:要开启application cache,需指定manifest属性(扩展名:.appcache);如果未指定manifest属性,页面不会缓存(除非在manifest文件中直接指定了该页面!) manifest文件在服务器上需正确的配置MIME-type:text/cache-manifest。

Manifest文件:

manifest是简单的文本文件,它告知浏览器被缓存的内容以及不被缓存的内容!

manifest可分为三部分

CACHE MANIFEST:此项列出的文件将在首次下载后进行缓存

NETWORK:此项列出的文件需要与服务器进行网络连接不会被缓存

FALLBACK:此项列出当页面无法访问时的回退页面(如:404页面)!

test.appcache:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 CACHE MANIFEST
 2 #2017 11 21 v10.0.1
 3 /test.css
 4 /logo.gif
 5 /main.js
 6 
 7 NETWORK
 8 /login.php
 9 /register.php
10 
11 FALLBACK
12 #/html/目录中文件无法访问时,用/offline.html替代
13 /html/ /offline.html

更新application cache的情况:

  1. 用户清空浏览器缓存!
  2. manifest文件被更改(#:表示注释,同时如果更改为#2018 1 1 v20.0.0,则浏览器会重新缓存!)
  3. 程序进行更新application cache!

Web Workers:

web workers是运行在后台的javascript,独立于其它脚本,不会影响页面性能!

而一般的HTML页面上执行脚本时,除非脚本加载完成,否则页面不会响应!

支持情况:IE10以上,现代浏览器

示例:html文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>web worker</title>
 8 </head>
 9 <body>
10     <p>计数:<output id="count"></output></p>
11     <button onclick="startWorker()">开始</button>
12     <button onclick="overWorker()">结束</button>
13 
14     <script>
15         var w;
16         function startWorker(){
17             // 检测浏览器是否支持web worker
18             if(typeof(Worker)!=='undefined'){
19                 if(typeof(w)=='undefined'){
20                     //创建web worker对象
21                     w=new Worker('testWorker.js');
22                 }
23                 // 事件持续监听(即使外部脚本已经完成),除非被终止
24                 w.onmessage=function(event){
25                     document.getElementById('count').innerHTML=event.data;
26                 };
27             }else{
28                 document.getElementById('count').innerHTML='浏览器不支持web worker';
29             }
30         }
31         function overWorker() {
32             // 终止web worker对象,释放浏览器/计算机资源
33             w.terminate();
34             w=undefined;
35         }
36     </script>
37 </body>
38 </html>

testWorker.js文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 var i=0;
2 function timedCount() {
3     i+=1;
4     // 重要的部分,向html页面传回一段信息
5     postMessage(i);
6     setTimeout('timedCount()',500);
7 }
8 timedCount();

注意1:通常web worker不是用于如此简单的任务,而是用在更耗CPU资源的任务! 注意2:在chrome中运行会产生“cannot be accessed from origin 'null'”的错误,我的解决方法是:xampp中开启apache,用http://localhost/进行访问。

web worker缺点:

由于web worker位于外部文件中,所以它无法访问下列javascript对象:

  • window对象;
  • document对象;
  • parent对象。

HTML5 server-sent events(服务器发送事件):

server-sent事件是单向信息传递;网页可以自动获取来自服务器的更新!

以前:网页先询问是否有可用的更新,服务器发送数据,进行更新(双向数据传递)!

支持情况:除IE以外的现代浏览器均支持!

示例代码:html文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>sever sent event</title>
 8 </head>
 9 <body>
10     <p>sever sent event informations</p>
11     <div id="test"></div>
12     <script>
13         // 判断浏览器是否支持EventSource
14         if(typeof(EventSource)!==undefined){
15             // 创建EventSource对象
16             var source=new EventSource("test.php");
17             // 事件监听
18             source.onmessage=function(event){
19                 document.getElementById('test').innerHTML+=event.data+"<br>";
20             };
21         }else{
22             document.getElementById('test').innerHTML="sorry,浏览器不支持server sent event";
23         }
24     </script>
25 </body>
26 </html>

test.php:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 <?php
2 header('Content-Type:text/event-stream');
3 header('Cache-Control:no-cache');
4 
5 $time=date('r');
6 echo "data:The server time is: {$time} \n\n";
7 // 刷新输出数据
8 flush();

注意:后面没有内容,php文件可以不用"?>"关闭!

HTML5 WebSocket:

  • WebSocket是HTML5提供的一种在单个TCP连接上建立全双工(类似电话)通讯的协议;
  • 浏览器和服务器之间只需要进行一次握手的操作,浏览器和服务器之间就形成了一条快速通道,两者之间就可直接进行数据传送;
  • 浏览器通过javascript建立WebSocket连接请求,通过send()向服务器发送数据,onmessage()接收服务器返回的数据。

实例可参考:点击这里进行跳转!

WebSocket如何兼容低浏览器:

  • Adobe Flash Socket;
  • ActiveX HTMLFile(IE);
  • 基于multipart编码发送XHR;
  • 基于长轮询的XHR

WebSocket可以用在多个标签页之间的通信!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
web messaging与Woker分类:漫谈postMessage跨线程跨页面通信
iframe_contentWindow.postMessage(message, targetOrigin, [transfer]);
周陆军
2021/07/03
2.3K0
H5-web存储
首先我们来思考几个问题: 1.什么是web存储? 2.h5引入web存储的原因? 3.web存储的方式有哪些? 使用html5在本地存储用户的浏览数据,之前采用的cookie的形式,但是cookie存储的数据量少而且效率底,进而引入了web存储,客户端存储数据的方式有两种:localStorage,永久性存储,除非自己删除,sessionStorage,关闭浏览器之后就会清空。
kdyonly
2023/03/03
2320
一些小参考
工作区(你本身的电脑)和版本库(git仓库,仓库里面有git的主体和暂存区),首先是工作区提交到暂存区(可以重复很多次),然后暂存区提交到git主体就是提交改变内容,插入分支里面(git commit的话只会commit暂存区内容)
用户7267083
2022/12/08
6620
【缓存】HTML5缓存的那些事
在HTML5出生之前,通常在浏览器(客户端)使用cookies来存储客户端的内容;
前端修罗场
2023/10/07
5201
【缓存】HTML5缓存的那些事
HTML5(三)——Web 本地存储
WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回服务器。
呆呆
2021/09/29
1.2K0
前端常见技术点-HTML扫盲(17问)
根据 <!DOCTYPE> 是否存在选择呈现模式,被称为 <!DOCTYPE> 切换或 <!DOCTYPE> 侦测。
用户5997198
2019/08/09
6300
Web缓存 - HTTP协议缓存
Web缓存一般分为浏览器缓存、代理服务器缓存以及网关缓存,本文主要讲的是 浏览器缓存,其它两种缓存大家自行去了解下。
laixiangran
2018/07/25
1K0
Web缓存 - HTTP协议缓存
前端学习(5)~html详解(三)
随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据,传统方式我们以document.cookie来进行存储的,但是由于其存储大小只有4k左右,并且解析也相当的复杂,给开发带来诸多不便,HTML5规范则提出解决方案。
Vincent-yuan
2020/02/23
6420
HTML5本地化应用开发-HTML5 Web存储详解
文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的。我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成。如有转载,请声明出处。
做全栈攻城狮
2018/12/20
8140
HTML5新特性
本章的主要内容有: ---- [1] 用于媒体回放的 video 和audio 元素 [2] HTML5拖放 [3] canvas简单应用 [4] Web存储: localStorage 和 SessionStorage [5] Input输入类型 [6] 表单类型 [7] 表单属性 [8] 地理定位 (geolocation) [9] Web Workers: Worker [10] 服务器发送事件 EventSource ---- [1] 用于媒体回放的 video 和audio 元素 video 支持
echobingo
2018/04/25
1.8K0
HTML5新特性
vue之Cookie
Cookie的使用必须基于web服务器,因为Cookie的操作会跟随http请求进行。 Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。 Cookie 并不是它的原意“甜饼”的意思,而是一个保存在客户机中的简单的文本文件,这个文件与特定的 Web 文档关联在一起,保存了该客户机访问这个Web 文档时的信息,当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性,因此它可以帮助我们实现记录用户个人信息的功能,而这一切都不必使用复杂的CGI等程序 。 举例来说,一个 Web 站点可能会为每一个访问者产生一个唯一的ID,然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web,会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名,就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存) 。 Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
张哥编程
2024/12/13
1520
vue之Cookie
【HTML5】296- 重新复习 HTML5 的 5大存储方式
在 HTML5 规范之前,存储主要是用 cookies 。 cookies 的缺点有:
pingan8787
2019/07/25
8740
【HTML5】296- 重新复习 HTML5 的 5大存储方式
HTML5 新特性_CSS3新特性
(1)HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准;
全栈程序员站长
2022/11/15
5.7K0
前端浏览器存储初探
随着现代化浏览器的发展,客户端的能力已经有了很大的提升,比如 Chrome、Firefox,通过 webkit 等内核的发展与版本的迭代与升级,浏览器变得越来越强大。对于前端来说,由于浏览器的升级所能做的事情越来越多,我们在数据存储方面也就有很多方案可以选择,大概有以下几种方式:
零式的天空
2022/03/25
2820
JS:Web Storage API(localStorage、sessionStorage)
Web Storage API 提供了存储机制,通过该机制,浏览器可以安全地存储键值对,比使用 cookie 更加直观。Web Storage 包含如下两种机制:
WEBJ2EE
2020/05/09
1.5K0
JS:Web Storage API(localStorage、sessionStorage)
前端|HTML5中的网络存储
随着互联网的快速发展,基于网页的应用越来越普遍,同时也变得越来越复杂,为了满足日益更新的需求,会经常性的在本地设备上存储数据,例如记录历史活动信息。传统方式使用document.cookie来进行存储,但是由于其存储的空间只有4KB左右,并且需要复杂的操作进行解析,给发开者带来很多不便,为此,HTML5规范提出了网络存储的解决方案。
算法与编程之美
2020/04/27
1.5K0
HTML5离线应用与客户端存储
支持离线 Web 应用开发是 HTML5 的另一个重点。所谓离线 Web 应用,就是在设备不能上网的情况下仍然可以运行的应用。
laixiangran
2018/07/25
4K0
HTML5学习笔记
参考资料:http://www.runoob.com/html/html-tutorial.html
易墨
2018/09/14
1.6K0
HTML5学习笔记
前端HTML5面试官和应试者一问一答
form特性在HTML5中,可以把从属于表单的元素放在任何地方,然后指定该元素的form特性值为表单的id,该元素就从属于表单。
达达前端
2021/01/14
2.1K0
前端HTML5面试官和应试者一问一答
HTML5离线缓存技术
原理和环境 如上面提到的HTML5的离线存储是基于一个新建的.appcache文件的,通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。 就像cookie一样,html5的离线存储也需要服务器环境。 这里提供一个小工具——简易iis服务器,把它放在项目更目录下,双击运行即可模拟服务器环境。 链接: http://pan.baidu.com/s/1jG86UV0 密码: ja9h 解析清单 在开始之
杭州前端工程师
2018/06/15
3.8K0
相关推荐
web messaging与Woker分类:漫谈postMessage跨线程跨页面通信
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验