常见的浏览器存储方式(cookie、localStorage、sessionStorage)


Posted in Javascript onMay 07, 2019

今天我们从前端的角度了解一下浏览器存储,我们常见且常用的存储方式主要由两种:cookie、webStorage(localStorage和sessionStorage)。下面我们来一一认识它们。

Cookie基于HTTP规范,用来识别用户。

Cookie是服务器发送到浏览器的一小段数据,会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。

Cookie诞生之初的作用就是解决HTTP的无状态请求,用来记录一些用户相关的一些状态。

•会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
•个性化设置(如用户自定义设置、主题等)
•浏览器行为跟踪(如跟踪分析用户行为等)

因为一些前端交互的需要,后来cookie也被用于存储一些客户端的数据。

Cookie的原生api不友好,需要自行封装一下。下面是封装后的方法。

创建cookie

/**
* @description js原生设置cookie
* @param {String} name 给你要设置的cookie起个名字(key)
* @param {String} value cookie的具体内容(value)
* @param {String} expiredays 设置cookie的过期时间,单位:天
*/
function setCookie(name, value, expiredays) {
var exdate=new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = name + '=' + escape(value)+ ((expiredays == null) ? '' : ';expires=' +exdate.toGMTString());
}

获取cookie

/**
* @description js原生获取cookie方法1
* @param {String} name 你要获取的cookie名
*/
function getCookie(name) {
if (document.cookie.length > 0) {


var start = document.cookie.indexOf(name + '=');


if (start !== -1) {



start = start + name.length + 1;



var end = document.cookie.indexOf(';', start);



if (end === -1) {




end = document.cookie.length;




return unescape(document.cookie.substring(start, end));



}

 }

}

return '';
}

/**
* @description js原生获取cookie方法2
* @param {String} name 你要获取的cookie名
*/
function getCookie(name) {

var cookieArr = document.cookie.split(';') || [];

if(!cookieArr.length){


return '';

}

for(var i = 0; i < cookieArr.length; i ++){


var key = $.trim(cookieArr[i]).split('=')[0];


var value = $.trim(cookieArr[i]).split('=')[1];


if(key === name){



return value;


}

}
}

检查cookie是否已存在

function checkCookie() {
username = getCookie('username');

if (username !== null && username !== '') {


alert('Welcome again ' + username + '!');

} else {


username = prompt('Please enter your name:', '');


if (username !== null && username !== '') {



setCookie('username',username,365);


}

}
}

jquery.cookie.js封装的cookie设置方法:

创建cookie

/**
* 'name', cookie命名
* 'value',cookie的值
* {
* expires: 7, // cookie有效期,单位天;默认值:会话cookie,关闭浏览器cookie失效。
* 
path: '/', // cookie影响到的路径;值为'/',表示设置cookie在整个域中可用;默认值:创建cookie的页面路径。
* 
domain: 'example.com', // 定义cookie有效的域。默认值:创建cookie的页面域。
* 
secure: false, // 定义cookie安全性,默认值:false,设置为true,则cookie在http中是无效的,cookie的传输需要使用安全协议(https)。
* }
*/
$.cookie('name', 'value', { expires: 7, path: '/', domain: 'example.com', secure: false});

读取cookie

$.cookie('name'); //name存在返回对应value,不存在返回null

读取所有可用的cookies:

$.cookie(); //{'name': value}

TODO:直接调用会报错?

常见的浏览器存储方式(cookie、localStorage、sessionStorage)

删除cookie

//成功删除cookie时返回true,否则返回false
$.removeCookie('name'); // => true
$.removeCookie('nothing'); // => false

注意:删除cookie时,必须传递用于设置cookie的完全相同的路径,域和安全选项,除非您依赖于默认选项。

即:设置cookie时如果设置了path属性或secure属性,删除的时候要带着这些属性,否则无法成功删除cookie。

// This won't work!
$.removeCookie('name'); // => false
// This will work!
$.removeCookie('name', { path: '/' }); // => true
TODO:$.removeCookie无效?

(jquery1.9.1.js + jquery.cookie.js,插件无重复引用的情况,$.removeCookie提示undefined)

常见的浏览器存储方式(cookie、localStorage、sessionStorage)

webStorage基于HTML5规范

HTML5 提供了两种在客户端存储数据的新方法:localStorage和sessionStorage,挂载在window对象下。

webStorage是本地存储,数据不是由服务器请求传递的。从而它可以存储大量的数据,而不影响网站的性能。

Web Storage的目的是为了克服由cookie带来的一些限制,当数据需要被严格控制在客户端上时,无须持续地将数据发回服务器。比如客户端需要保存的一些用户行为或数据,或从接口获取的一些短期内不会更新的数据,我们就可以利用Web Storage来存储。

localStorage的生命周期是永久性的。localStorage存储的数据,即使关闭浏览器,也不会让数据消失,除非主动的去删除数据。如果 想设置失效时间,需自行封装。

sessionStorage 的生命周期是在浏览器关闭前。

  特性:

•关闭浏览器sessionStorage 失效;
•页面刷新不会消除数据;
•只有在当前页面打开的链接,才可以访sessionStorage的数据,使用window.open打开页面和改变localtion.href方式都可以获 取到

sessionStorage内部的数据;

存储方式 作用与特性 存储数量及大小 api
cookie ● 存储用户信息,获取数据需要与服务器建立连接。 ● 可存储的数据有限,且依赖于服务器,无需请求服务器的数据尽量不要存放在cookie中,以免影响页面性能。 ● 可设置过期时间。 ● 最好将cookie控制在4095B以内,超出的数据会被忽略。 ● IE6或更低版本最多存20个cookie; IE7及以上版本最多可以有50个;Firefox最多50个;chrome和Safari没有做硬性限制。 原生、$.cookie(详见上文)
localStorage ● 存储客户端信息,无需请求服务器。 ● 数据永久保存,除非用户手动清理客户端缓存。 ● 开发者可自行封装一个方法,设置失效时间。   5M左右,各浏览器的存储空间有差异。(感兴趣的同学可以自己试一下)。 // 保存数据到 localStorage localStorage.setItem('key', 'value'); // 从 localStorage 获取数据 let data = localStorage.getItem('key'); // 从 localStorage 删除保存的数据 localStorage.removeItem('key'); // 从 localStorage 删除所有保存的数据 localStorage.clear();
sessionStorage ● 存储客户端信息,无需请求服务器。 ● 数据保存在当前会话,刷新页面数据不会被清除,结束会话(关闭浏览器、关闭页面、跳转页面)数据失效。   同localStorage // 保存数据到 sessionStorage sessionStorage.setItem('key', 'value'); // 从 sessionStorage 获取数据 let data = sessionStorage.getItem('key'); // 从 sessionStorage 删除保存的数据 sessionStorage.removeItem('key'); // 从 sessionStorage 删除所有保存的数据 sessionStorage.clear();

总结:

以上所述是小编给大家介绍的常见的浏览器存储方式(cookie、localStorage、sessionStorage),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
用JS剩余字数计算的代码
Jul 03 Javascript
javascript学习(二)javascript常见问题总结
Jan 02 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
Nov 21 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
Mar 12 Javascript
ES6的Fetch异步请求的实现方法
Dec 07 Javascript
js中数组常用方法总结(推荐)
Apr 09 Javascript
8个有意思的JavaScript面试题
Jul 30 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 Javascript
JavaScript实现随机点名器实例详解
May 07 #Javascript
vue父组件触发事件改变子组件的值的方法实例详解
May 07 #Javascript
微信小程序:数据存储、传值、取值详解
May 07 #Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
May 07 #Javascript
详解Vue前端生产环境发布配置实战篇
May 07 #Javascript
7个好用的JavaScript技巧分享(译)
May 07 #Javascript
微信小程序实现获取用户信息并存入数据库操作示例
May 07 #Javascript
You might like
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
使用python实现名片管理系统
2020/06/18 Python
python算的上脚本语言吗
2020/06/22 Python
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
模范家庭事迹材料
2014/02/10 职场文书
协议书模板
2014/04/23 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript