浅谈浏览器存储(cookie、localStorage、sessionStorage)

今天我们从前端的角度了解一下浏览器存储,我们常见且常用的存储方式主要由两种: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,不存在返回null

TODO:直接调用会报错?

删除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()直接调用不传参提示not a function)

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 API

https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

http://www.w3school.com.cn/js/js_cookies.asp

https://github.com/carhartl/jquery-cookie#readme

webStorage

http://www.w3school.com.cn/html5/html_5_webstorage.asp

https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Storage_API

原文地址:https://www.cnblogs.com/qiujianmei/p/10824682.html

时间: 2024-08-29 02:06:15

浅谈浏览器存储(cookie、localStorage、sessionStorage)的相关文章

浅谈密码存储安全

前言 用户信息泄露事件层出不穷,百度或谷歌输入"密码泄露",搜出来的泄密门更是让人目瞪口呆:从小公司到大公司,从明文存储到普通的哈希加密.作为一个IT从业者,我深刻感受到"得用户者得天下",尤其在互联网+盛行的趋势下.密码存储作为软件服务系统基础架构中不可缺少的一部分,越来越多的受到开发者的重视.对于一个服务,如果信息安全部分出问题,我想没有必要进一步去做用户体验的提升,性能的优化.进而也不可能获取大用户的青睐.还是那句话:出来混,迟早要还的. 本人并非密码学出生,

浅谈浏览器的缓存机制

浏览器的缓存可分为HTTP缓存和离线缓存,下面将分别介绍 HTTP缓存 只有GET请求能被缓存,POST不能被缓存.Modified Time/ETag/Expires/Cache都是HTTP协议的缓存策略 先来一个例子 当我们第二次访问百度首页,在Chrome的Network面板中打开一个静态文件时会发现响应的status是:200 OK (from disk cache),不是应该返回304 Not Modified吗?如果你知道答案,那就可以忽略本文了. Cache-Control 简介

浅谈web存储

1.先来说说之前的客户端存储吧~在html5出来之前~客户端存储主要是使用cookie~不过这种古老的方式存在着好一些弊端~举例如下: 可以存储的数据的大小受到限制~官方指出一个域名下最多可以存储4k的数据(有点少吧~~) cookie的数据放到了http请求头上~这样不仅使得http请求头变得臃肿~过多的cookie会使请求越来越慢~同时还带来了安全的问题~这玩意默认是明文的 同时注意cookie是会过期的~ 2.还有一种存储方式是userData~但是这个只有ie支持~考虑到平台的限制~此处

cookie,localStorage,sessionStorage的区别

一.概念 Cookie 什么是Cookie —— Cookie 是一些数据, 存储于你电脑上的文本文件中. localStorage 什么是 localStorage —— localStorage 是指将信息数据存储在客户端本地的硬件上,即使浏览器被关闭了,信息数据同样存在 sessionStorage 什么是 sessionStorage —— sessionStorage 是指将信息数据存储在session对象中,所以当浏览器关闭后,sessionStorage也随之清空 二.如何使用(一

浅谈浏览器的兼容性

浏览器的兼容性浅谈 Css兼容性 <span>标签在IE下要放在前面,否则IE会有问题. IE6下没有min-width的概念,起默认的width就是min-width IE6下两个float之间会有3px的bug IE6图片的下方会有空隙 IE6下margin:0 auto不能剧中,解决:为其父容器设置text-align:center A标签的伪类一定要按LV H A的顺序写,否则ie6有错误 Javascript的兼容性 绑定事件不一样.标准的绑定事件为addEventListener,

浅谈MySQL存储引擎-InnoDB&amp;MyISAM

存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见的InnoDB和MyISAM两种存储引擎进行讨论.本文中关于数据存储形式和索引的可以查看图解MySQL索引 MySQL逻辑架构图: InnoDB存储引擎 InnoDB是默认的事务型存储引擎,也是最重要,使用最广泛的存储引擎.在没有特殊情况下,一般优先使用InnoDB存储引擎. 1??.数据存储形式

浅谈浏览器缓存-2016

前(fei)言(hua):新年第一篇文章, 这一博文代码准备许久奈何之前比较忙,春节后这几天有空总结下浏览器缓存. 浏览器缓存历史简介 浏览器缓存实现一开始各家浏览器厂商标配的都是Cookies, 随着前端显示越来越复杂,Cookies那可怜的几K容量明显不够用了:在2000年至2008年间,没有统一标准出现了很多浏览器缓存的插件实现如:Flash SharedObject ,Google Gears:HTML5标准的提出,出现了很多缓存的标准如:localstorage ,webSql ,In

解读cookie,localstorage,sessionstorage用法与区别2(解读cookie)

说到本地存储 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 永久存储(可以手动删除数据) sessionStorage - session临时回话,从页面打开到页面关闭的时间段 窗口的临时存储,页面关闭,本地存储消失 其实前景和作用和cookie也是相同甚至从cookie演变而来,用一张图来表示服务商对本地存储的探索. 由图就可以看出本地存储的和cookie的区别,存储大且无插件. 这时也许就该思考H5的最大问题兼容性,这是本地存储支持情况图. 检测: if(w

cookie,localStorage,sessionStorage的特点与区别。

1.cookie Cookie实际上是一小段的文本信息.客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会把Cookie保存起来.当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器.服务器检查该Cookie,以此来辨认用户状态.服务器还可以根据需要修改Cookie的内容.由于cookie的安全性不高,所以一般不把密码保存在cookie中: 2.localStorage ①相当于一个5M大小的前端数据库