localStorage/cookie 用法分析与简单封装
本地存储是HTML5中提出来的概念,分localStorage和sessionStorage。通过本地存储,web应用程序能够在用户浏览器中对数据进行本地的存储。与 cookie 不同,存储限制要大得多(至少5MB),并且信息不会被传输到服务器。
什么时候用本地存储?
跨期:不同时间打开页面,比如这次登录需要用到上次登录时保存的数据。
跨页:在同一个浏览器打开同域的多个标签页,它们之间需要互通数据。
选用哪种存储方式?
最简单的数据保存方式就是在js里定义变量并赋值,这不属于本地存储的范畴,但大多数情况下这样做就够了。
cookie的适用场景:数据量小;数据需要随http请求传递到服务端;存储有具体时限的数据;低版本浏览器,不支持localStorage和sessionStorage时。
localStorage的使用场景:数据大于4k;需要跨标签页使用数据;长期存储数据;
sessionStorage的适用场景:数据只在本次会话有效;数据仅在当前标签页有效。sessionStorage对比直接js赋值变量的优势,是可以在同页面跨iframe使用。
浏览器自身会缓存img、js、css等数据,localStorage也可以起到类似作用。
整理本地存储方法
基于localStorage制作一个本地存储插件storage.js,针对只能存字符串、不能设置时限等进行补充,设想:
- 在不支持localStorage时自动使用cookie
- 类型转换,可存储数字、布尔、对象等
- 可设置时限,超时就自我删除
- 附带整理cookie方法
用法展示:
/** setItem( key, value, time)
* key: 键名,字符串
* value:键值,可以是Stirng/Boolean/Number/Object等类型
* time: 超时时间,非必填,数字型(单位毫秒)。默认长期有效。
**/
storage.setItem("text", "this is string");
storage.setItem("money", 1234);
storage.setItem("person", {name: "Jone"}, 24*60*60*1000); // getItem 获取值
storage.getItem("money"); //返回数字类型的值1234 // removeItem 删除某数据
storage.removeItem("money"); // clear 清除所有数据
storage.clear(); // 类似方法,操作cookie,只限于存储字符串
storage.setCookie("mycookie", "this is string", 60*60*24*30);
storage.getCookie("mycookie");
storage.removeCookie("mycookie");
storage.clearCookie();
storage.js :
(function(window) {
var storage = {}; // 是否支持localStorage
if (!window.localStorage) {
storage.support = false;
} else {
storage.support = true;
} // time为超时时间(单位毫秒),非必填
storage.setItem = function(key, value, time) {
if (this.support) {
if (typeof key != "string") {
console.log("*STORAGE ERROR* key必须是字符串");
return;
}
if (time) {
if (typeof time != "number") {
console.log("*STORAGE ERROR* time必须是数字");
return;
} else {
time = parseInt(time) + (new Date()).getTime();
}
} else {
time = null;
}
var setValue = {
value: JSON.stringify(value),
time: time
}
localStorage.setItem(key, JSON.stringify(setValue));
} else {
storage.setCookie(key, value, time)
}
}; // 不存在的值会返回null
storage.getItem = function(key) {
if (this.support) {
var getValue = JSON.parse(localStorage.getItem(key));
if (!getValue) {
return null;
}
if (getValue.time && getValue.time < (new Date()).getTime()) {
localStorage.removeItem(key);
return null;
} else {
return JSON.parse(getValue.value)
}
} else {
storage.getCookie(key)
}
}; // 移除某个值
storage.removeItem = function(key) {
if (this.support) {
localStorage.removeItem(key);
} else {
storage.removeCookie(key)
}
};
// 清空存储
storage.clear = function() {
if (this.support) {
localStorage.clear();
} else {
storage.clearCookie();
}
}; /**** cookie方法 ****/
storage.setCookie = function(key, value, time) {
if (typeof key != "string") {
console.log("*STORAGE ERROR* key必须是字符串");
return;
} else {
if (typeof time != "number") {
// cookie默认存365天
time = 365 * 24 * 60 * 60 * 1000;
}
var d = new Date();
d.setTime(d.getTime() + time);
document.cookie = key + "=" + value + "; expires=" + d.toGMTString();
}
};
storage.getCookie = function(key) {
var cookies = document.cookie.split(";")
var cookieValue;
for (var i = 0; i < cookies.length; i++) {
if (key == cookies[i].split("=")[0]) {
cookieValue = cookies[i].split("=")[1];
break;
}
}
return cookieValue;
};
storage.removeCookie = function(key) {
document.cookie = key + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
};
storage.clearCookie = function() {
var cookies = document.cookie.split(";")
for (var i = 0; i < cookies.length; i++) {
document.cookie = cookies[i].split("=")[0] + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
}
}; window.storage = storage;
})(window)
localStorage/cookie 用法分析与简单封装的更多相关文章
- jquery.cookie用法详细解析,封装的操作cookie的库有jquery.cookie.js
jquery.cookie用法详细解析 需要注意存入cookie前,对数据进行序列化, 得到后在反序列化: 熟练运用:JSON.stringify();和JSON.parse(): 通常分为如下几个步 ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- 面localStorage用作数据缓存的简易封装
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
- 孟老板 BaseAdapter封装 (一) 简单封装
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- sessionStorage & localStorage & cookie
sessionStorage & localStorage & cookie 概念 html5中的Web Storage包括了两种存储方式:sessionStorage和localSt ...
- python网页请求urllib2模块简单封装代码
这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...
- 对pymysql的简单封装
#coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...
- python笔记之常用模块用法分析
python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...
- sessionStorage和localStorage的用法,不同点和相同点
一,共同点 (1)存储时用setItem: localStorage.setItem("key","value");//以"key"为名称存 ...
随机推荐
- 解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题
一.背景 最近在整合了Spring+Shiro+Redis实现tomcat集群session共享的问题之后,发布以后运行以后发现老是会出现:org.apache.shiro.session.Unkno ...
- Redis学习之实现优先级消息队列
很久没有写博客了,最近简单的学习了一下Redis,其中学习了一下用Redis实现优先级消息队列.关于更多更为详细的可以在www.redis.cn找到相关资料. 对于熟悉Redis的童鞋提到队列很自然的 ...
- Maven 入门——Maven 的安装和配置
1.安装 Windows 环境 Maven 官网下载安装文件 解压到指定目录 配置环境变量(M2_HOME) cmd 输入 mvn -v Mac环境 brew install maven 配置环境变量 ...
- ASP.NET 数据绑定到列表控件
<div> <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox> ...
- T-SQL 分布式查询
--返回本地服务器中定义的链接服务器列表. EXEC sys.sp_linkedservers /* 创建或更新 SQL Server 本地实例上的登录名与远程服务器中安全帐户之间的映射. 当用户登录 ...
- 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
目录 描述 解法:双指针 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以访问我的 github. 描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回 ...
- CSS 分类 选择器
CSS:层叠样式表(英文全称:Cascading Style Sheets) 后缀名:css 标志 style 对网页中元素位置的排版进行像素级精 ...
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
WEB层: // 获取分页的请求参数 String start = request.getParameter("start"); String page = request.get ...
- [android] 优酷环形菜单-旋转动画
获取房子,菜单图标ImageView对象,获取三个圆环RelativeLayout对象 给菜单图标(icon_menu)设置点击事件 定义一个成员变量isLevel3Show来存储第三级菜单是否显示 ...
- [PHP] 看博客学习插入排序
定义数组长度变量$len,使用count()函数,参数:数组 for循环数组,条件:从第二个开始,遍历数组,循环内 定义临时变量$temp,赋值当前元素 for循环数组,条件:遍历当前元素前面的所有元 ...