HTML5之前的存储:cookie
设置cookie:
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>cookie的应用——记住用户名</title>
</head>
<body>
<form action="#" id="myform">
<label for="username">用户名:</label><input type="text" name="username" id="username" />
<label for="userpass">密码:</label><input type="password" name="userpass" id="userpass" />
<input type="submit" value="登录" />
<a href="javascript:;">清除记录</a><br>
<span id="span1"></span>
</form>
<script>
window.onload = function(){
function setCookie(name,value,hours){
var d = new Date();
d.setTime(d.getTime() + hours * 3600 * 1000);
document.cookie = name + '=' + value + '; expires=' + d.toGMTString();
console.log("cookie",document.cookie);
}
function getCookie(name){
var arr = document.cookie.split('; ');
for(var i = 0; i < arr.length; i++){
var temp = arr[i].split('=');
if(temp[0] == name){
return temp[1];
}
}
return '';
}
function removeCookie(name){
var d = new Date();
d.setTime(d.getTime() - 10000);
document.cookie = name + '=1; expires=' + d.toGMTString();
}
var mm = new Date();
var oSpan = document.getElementById("span1");
oSpan.innerHTML = mm;
var oForm = document.getElementById('myform');
var oTxt1 = document.getElementById('username');
var oTxt2 = document.getElementById('userpass');
var oClear = document.getElementsByTagName('a')[0];
oTxt1.value = getCookie('username');
oTxt2.value = getCookie('userpass');
oForm.onsubmit = function(){
setCookie('username',oTxt1.value,30);
setCookie('userpass',oTxt2.value,30);
}
oClear.onclick = function(){
removeCookie('username');
removeCookie('userpass');
oTxt1.value = '';
oTxt2.value = '';
}
}
</script>
</body>
</html>
上述代码包含设置、读取、清除cookie。
运行后:
在谷歌上检查设置的cookie,发现设置是正常的。检查方法可以看这篇文档。
同时,这里也设置了时长:
cookie存储永久数据存在这几个问题:
大小:cookie的大小被限制在4KB。
带宽:cookie是随HTTP事务一起被发送的,因此会浪费一部分发送cookie时使用的带宽。
复杂性:要正确的操作cookie是很困难的。
Web Storage
实现数据存储的实例:
html部分:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>webStorage示例</title>
</head>
<body>
<h1>webStorage示例</h1>
<p id="msg"></p>
<input type="text" id="input" />
<input type="button" value="保存数据" onClick="saveStorage('input');"/>
<input type="button" value="读取数据" onClick="loadStorage('msg');"/>
</body>
</html>
HTML5之后的存储:sessionStorage
将数据保存到session对象中。所谓session,是指用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间,session对象可以用来保存在这段时间内所要求保存的任何数据。
sessionStorage.setItem('key','value');
//或
sessionStorage.key = 'value';
//读取数据的方法
变量 = sessionStorage.getItem('key');
//或
变量 = sessionStorage.key;
在使用sessionStoage存储数据时,
function saveStorage(id){
var target = document.getElementById(id);
var str = target.value;
sessionStorage.setItem("message",str);
//或sessionStorage.message = str;
console.log(sessionStorage);
}
function loadStorage(id){
var target = document.getElementById(id);
var msg = sessionStorage.getItem("message");
// 或 var msg = sessionStorage.message;
target.innerHTML = msg;
}
存储的结果:
HTML5之后的存储:localStorage
设置
将数据保存到客户端本地的硬件设备(硬盘或其他)中,即使浏览器被关闭,该数据仍然存在,下次打开浏览器访问网站仍然可以继续访问。
localStorage.setItem('key','value');
//或
localStorage.key = 'value';
//读取数据的方法
变量 = localStorage.getItem('key');
//或
变量 = localStorage.key;
在使用localStorage存储数据时:
function saveStorage(id){
var target = document.getElementById(id);
var str = target.value;
localStorage.setItem("message",str);
//localStorage.message = str;
console.log(localStorage);
}
function loadStorage(id){
var target = document.getElementById(id);
var msg = localStorage.getItem("message");
// 或 var msg = localStorage.message;
target.innerHTML = msg;
}
与sessionStorage存储位置一致。
在浏览器查看,打开调试工具(F12),在application选项卡下可以查看。
localStorage作为客户端浏览器持久化存储方案
存储位置
这个是浏览器隔离的,每个浏览器都会把localStorage存储在自己的UserData中,如chrome一般就是
C:\Users\你的计算机名\AppData\Local\Google\Chrome\User Data\Default\Local Storage\leveldb
下的文件
003140.log 看到存储的数据 testtest:
区别
localStorage和sessionStorage的相同点:
- 共同方法key、setItem、getItem、removeItem、clear()等方法。
- 都是用来存储客户端临时信息的对象。
- 他们均只能存储字符串类型的对象
- 存储大小都为5M
- 都遵守同源策略
下图是在浏览器内sessionStorage对象内的方法:
不同点:
- sessionStorage为临时保存,浏览器关闭则失效,localStorage为永久保存。
- localStorage 在同源的不同窗口下可共享,在不同浏览器中不可共享
- sessionStorage 在同源的不同窗口下不可共享。注意这里的不同窗口是指浏览器另起一窗口,并不是指页面路由跳转