您现在的位置:首页 >> 前端 >> 内容

(23)HTML5-Cookie和Session

时间:2016/9/5 9:52:50 点击:

  核心提示:cookies的特点是将数据存储于client的浏览器中,因此当cookie没有经过加密时,在传输的过程中容易被拦截,因此不建议用cookie存储一些私密性高的数据。当server端想要存储用户的某些...

cookies的特点是将数据存储于client的浏览器中,因此当cookie没有经过加密时,在传输的过程中容易被拦截,因此不建议用cookie存储一些私密性高的数据。

当server端想要存储用户的某些信息时,可以放送一个cookie给client,这时便会通过javascript的语句将数据写入文件内,然后存储在用户的电脑里,当日再次启动同一个页面时,就会通过javascript读取cookie记录,便得知这个用户上一次进入网页的时间与操作记录。以Netscape浏览器来说,所有记录的cookie会存在cookies。txt这个文件内,而IE浏览器会将每个cookie视为独立的文件,存放在Temporary Internet Files文件夹内。

Cookies常见的用途是帮助用户存储已经输入过的信息,例如登录某些购物网站后,会输入姓名,E-mail,住址和电话号码等信息,此时网站就可以要求将这些信息存入Cookie中,当下次再次登录时就会自动带出这些已经记录的个人信息,节省用户重复输入资料的时间。

然而,除了能够带给用户更佳的操作体验外,也可以用作商业用途,例如上次向网页浏览者显示了一段广告,便将浏览者已经看过此段广告的信息记录到cookie中,当浏览者下次再进入网站时,即可选择播放用户尚未看过的广告。

通过javascript的指令就可以设置,删除与阅读存储在client端的cookie。

documents.cookie="name=value;expires=expDate";

语句中的“name”代表cookie的名称,“value”代表所有存储信息,“expires”用来指定这个cookie的到期日,当到了期限日时cookie就会失效。若没有设置cooke的到期日,关闭浏览器就会使cookie失去作用。

“expDate”代表cookie的到期时间,采用GMT格式(Wdy,DD-Mon-YY HH:MM:SS GMT)来表示。

接下来通过简单的“设置”与“显示”cookie的信息来演示:与cookie存放于client端相比,session的运行属于将信息存放于sever端的一种机制,server会通过表格结构存储session要求保存信息,该表格内容包括一组id以及对应的存储信息。当之后浏览器再度进入网页时,便会夹带一个session id发送给server端,server端就会按照这个id去检索过去所存储在server端的数据,如此一来就能辨别每个用户所存储的状态。

由于session是将信息存储在server端的一种方法,因此浏览器在造访网页时,server端会替代client端创建一个session,若client端请求里包括一个session id,代表server端曾经为了这个用户创建过session,此时server就会按照client发出的session id检索存储在server端的数据。因此session id值是一个不会重复(唯一的,就像是用户的身份证号码一样),且不容易被破解的字符串。

由于session大都交由PHP语句来实现,javascript并没有提供调用的方法,所以本书并不去探讨session语句的内容。但是接下来的章节中会提到”HTML5“所提供的“数据存储”功能,称为“Web Storage”,读者可以比较一下Web Storage和这里所认识的Cookie与Session的差别。

Web Storage是HTML5所归划得本地数据存储功能,是一种可以让网页将数据存储在本地端的技术,看起来虽然与cookie类似,但是存储与cookie的数据可以通过浏览器所送出的request传送到server端,而Web Storage的数据却只能存储于本机,无法直接传送出去,因此Web Storage不会占用网络带宽。

HTML5的Web Storage强调可以在client端暂存过更多的信息,和之前介绍的cookie相比,Web Storage具有以下两项优势:

节省传输宽带

无论是否使用到cookie中的信息,cookie都会随着HTTP request送到server端,造成不必要的资源浪费,Web Storage的本地暂存特性则解决了这个问题。

更大的存储空间

cookie的存储容量上限为4KB,无法存放太多的数据,Web Storage消除了此项限制,预设存储空间至少5MB。

HTML5的Web Storage下有两种方法,分别是localStorage和sessionStorage,这两项差异主要表现在“生命周期”与“作用范围”上。

LocalStorage具有较长的生命周期,通常要等到javascript发出清除指令或是用户清空Cache时才会消失;sessionStorage的生命周期较短,只要将浏览器或浏览器分页关闭时就会消失。

LocalStorage的数据可以跨浏览器分页(tab)而存在,因此其作用范围较为广泛;sessionStorage只能存在一个分页(tab)中,因此即使浏览器没有关闭,在同一个浏览器的新分页中也无发共享sessionStorage的数据。

LocalStorage的特性与cookie较为类似,通过javascript指令的控制,开发人员可以决定LocalStorage的存在时间,因此并不会随着浏览器的关闭而遗失LocalStorage中所存储的数据,适用于需要跨分页,跨窗口,甚至浏览器结束后仍要保存数据的场合。

设置LocalStorage的javascript语句有许多种形式,可以通过“setItem”方法,也可以直接指定某个标签ID下要存放的信息。以下四种方法,都同样代表设置LocalStorage的方法,参数“MyKeyName”为数据的搜索标签,参数“MyDateValue”可输入所要存储的数据。

window.LocalStorage.setItem("MyKeyName","MyDataValue");
LocalStorage.setItem("MyKeyName","MyDataValue");
SessionStorage["MyKeyName"]="MyDataValue";
LocalStorage.MykeyName="MyDataValue";
var value1=window.LocalStorage.getItem("MyKeyName");
var value1=LocalStorage.getItem("MyKeyName");
var value1=LocalStorage["MyKeyName"];
var value1=LocalStorage.MyKeyName;

清楚LocalStorage的JavaScript语句可以通过“removeItem”来实现,使用“removeItem”可以指定想要删除的某个标签ID下的信息,若要清楚全部的LocalStorage则可以使用“clear()”方法。

//清除MyKeyName此笔数据
localStorage.removeItem("MyKeyName");
//清除所有LocalStorage数据
localStorage.clear();

接下来通过一个简单的例子练习LocalStorage的设置与读取,这个范例也示范出LocalStorage的一种应用,可以记录用户访问此网页的次数,结合其他商业应用(例如广告播放),可以带给用户每次进入都可以看到不同的内容的独特感受。

由于Storage属于本地信息存储,所以不需要使用到服务器,启动网页后在画面中会显示出当前已访问过网页一次,通过不断刷新网页(F5)会发现访问次数会不断加1.此时若关闭网页再重新执行一次,LocalStorage所存储的数据仍然保留,并不会因此归零重新计算,这就是LocalStorage不会随浏览器结束而消失的特性。

接下来看看程序代码内容。在程序开始,首先用判断语句来判断是否为第一次登录网页,因此检测localStorage.count的内容若为0,则代表第一次登录,便将count值设为1;若非第一次登录,则将count的值加一,最后使用write()将记录的信息(进入的次数)显示在画面。

SessonStorage仅能存在于一个浏览器分页(tab)中,这代表每个窗口都会有自己的SssionStorage空间,即使在同一个浏览器下,不同的分页就存储有不同的sessionStorage内容。因此当浏览器关闭时,此窗口的sessionStorage也会跟着清除,按照此特性来看,sessionStorage仅适合用于存储暂时性的数据。

sessionStorage的语句与LocalStorage完全相同,只要将LocalStorage替换为SessionStorage即可。

window.SessionStorage.setItem("MyKeyName","MyDataValue");
SessionStorage.setItem("MyKeyName","MyDataValue");
SessionStorage["MyKeyName"]="MyDataValue";
SessionStorage.MykeyName="MyDataValue";
var value1=window.SessionStorage.getItem("MyKeyName");
var value1=SessionStorage.getItem("MyKeyName");
var value1=SessionStorage["MyKeyName"];
var value1=SessionStorage.MyKeyName;

 

Tags:23 3H HT TM 
作者:网络 来源:梧桐下的四叶草