常见的浏览器存储方式(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 相关文章推荐
jQuery 全选/反选以及单击行改变背景色实例
Jul 02 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
js弹出div并显示遮罩层
Feb 12 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
Jun 05 Javascript
javascript手风琴下拉菜单实现代码
Nov 12 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
Javascript下拉刷新的简单实现
Feb 14 Javascript
vue项目中的webpack-dev-sever配置方法
Dec 14 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
vue之将echart封装为组件
Jun 02 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
Oct 14 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
计算php页面运行时间的函数介绍
2013/07/01 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python Tkinter的图片刷新实例
2019/06/14 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
暑期社会实践感言
2014/02/25 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
交通文明倡议书
2014/05/16 职场文书
产品售后服务承诺书
2014/05/21 职场文书
幼儿园感谢信
2015/01/21 职场文书
廉洁自律个人总结
2015/02/14 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技