Cookie

Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。

一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。

所以Cookie会随HTTP请求在服务器与客户端之间来回传递。

Cookie 是一些数据, 存储于你电脑上的文本文件中。

Cookie 以名/值对形式存储,如下所示:

name=adoctors

使用 JavaScript 创建Cookie

document.cookie="name=adoctors";

还可以为 cookie 添加一个过期时间(以 UTC 或 GMT 时间)。默认情况下,cookie 在浏览器关闭时删除:

document.cookie="name=adoctors; expires=Thu, 18 Dec 2018 12:00:00 GMT";

使用 JavaScript 读取 Cookie

var x = document.cookie;

使用 JavaScript 修改 Cookie

在 JavaScript 中,修改 cookie 类似于创建 cookie,旧的 cookie 将被覆盖。

使用 JavaScript 删除 Cookie

删除 cookie 非常简单。您只需要设置 expires 参数为以前的时间即可

document.cookie = "name=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

为了使用方便,将方法封装如下:

function setCookie(name,val,day){
var time=new Date();
time.setTime(time.getTime()+day*24*60*60*1000);
document.cookie=name+"="+val+";expires="+time.toGMTString();
}
function getCookie(name){
var arr=document.cookie.split(";");
for(var i=0;i<arr.length;i++){
arr[i]=arr[i].replace(/^\s*|\s*$/,"");
if(arr[i].indexOf(name+"=")==0){
return arr[i].substring(name.length+1)
}
}
}
function clearAllCookie(){
var str=document.cookie.match(/[^=;]+(?==)/g);
for(var i=0;i<str.length;i++){
str[i]=str[i].replace(/^\s*|\s*$/,"");
document.cookie=str[i]+"=0;expires=Wed Jan 04 2000 15:45:56 GMT"
}
}

Cookie的缺点主要集中于安全性于隐私保护,主要包括一下几点:

  • Cookie可能被用户禁用
  • 同一个页面被不同浏览器访问时,浏览器之间保存的Cookie是不能互相访问的
  • 每个Cookie都是存在客户端硬盘上的文件,可能被删除
  • Cookie安全性不够高,所有Cookie都是以纯文本的形式记录于文件中

sessionStorage & localStorage

localStorage用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。

sessionStorage用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。

不管是 localStorage,还是 sessionStorage,可使用的API都相同,常用的有如下几个(以localStorage为例):

保存数据:localStorage.setItem(key,value);

读取数据:localStorage.getItem(key);

删除单个数据:localStorage.removeItem(key);

删除所有数据:localStorage.clear();

得到某个索引的key:localStorage.key(index);

如:

sessionStorage.setItem('bindingType','wechat');
sessionStorage.getItem('topicRes') localStorage.setItem('province', JSON.stringify(res.data.data));
localStorage.getItem("province")

与Cookie相比的优势

  • 不需要安装额外的插件
  • 存储空间高达5MB(Cookie只有4kb)
  • 操作简单

注意:任何格式存储是会自动被转换为字符串,所以读取时注意格式转换。

JavaScript -- 数据存储的更多相关文章

  1. 关于javascript数据存储机制的一个案例。

    之前在学习js的结合性的时候,我有点不太明白,在网上找到一个比较经典的C语言优先级结合性的案例,就是下边这一个.本想在js之中测试一番,结果竟然发现得出的结果和网上的不一样,这令我百思不得其解,后经高 ...

  2. JavaScript数据存储和深浅拷贝实际运用

    JavaScript分两种数据类型.1.简单数据类型有:number, string, boolean, undefined和null当声明一个简单数据类型的变量时,在内存中会把数据存在栈里.2.复杂 ...

  3. 【前端学习笔记05】JavaScript数据存储Cookie相关方法封装

    //Cookie设置 //设置新cookie function setCookie(name,value,duration){ var date = new Date(); date.setTime( ...

  4. JavaScript高级编程———数据存储(cookie、WebStorage)

    JavaScript高级编程———数据存储(cookie.WebStorage) <script> /*Cookie 读写删 CookieUtil.get()方法根据cookie的名称获取 ...

  5. JavaScript笔记01——数据存储(包括.js文件的引用)

    While, generally speaking, HTML is for content and CSS is for presentation, JavaScript is for intera ...

  6. 数据存储 --《高性能JavaScript》

    1.数据存储的方式 1.字面量 2.变量 3.数组项 4.对象成员 2.各自的性能特点 1.访问字面量和局部变量的速度最快,访问数组项和对象成员相对较慢 2.由于局部变量在作用域链的起始位置,因此访问 ...

  7. Javascript本地存储小结

    前言 总括:详细讲述Cookie,LocalStorge,SesstionStorge的区别和用法. 人生如画,岁月如歌. 原文博客地址:Javascript本地存储小结 知乎专栏&& ...

  8. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...

  9. 15个JavaScript本地存储技术的函数库和工具

    当构建更复杂的JavaScript应用程序运行在用户的浏览器是非常有用的,它可以在浏览器中存储信息,这样的信息可以被共享在不同的页面,浏览会话. 在最近的过去,这将有可能只被cookies文本文件保存 ...

随机推荐

  1. Codeforces 366C Dima and Salad:背包dp

    题目链接:http://codeforces.com/problemset/problem/366/C 题意: 有n个物品,每个物品有两个属性a[i]和b[i]. 给定k,让你选出一些物品,使得 ∑ ...

  2. invalid constant type: 18

    javassist 3.18以下的版本不支持在JDK1.8下运行

  3. 分享知识-快乐自己:反射机制Demo解析

    Java-Reflect专题 基本反射简介: 1):JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象能够调用它的任意方法和属性;这种动态获取信息以及动 ...

  4. vue2.0使用Sortable.js实现的拖拽功能

    简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jQuery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...

  5. G 唐纳德与子串(easy)(华师网络赛---字符串,后缀数组)(丧心病狂的用后缀自动机A了一发Easy)

    Time limit per test: 1.0 seconds Memory limit: 256 megabytes 子串的定义是在一个字符串中连续出现的一段字符.这里,我们使用 s[l…r] 来 ...

  6. ACM学习历程——ZOJ 3829 Known Notation (2014牡丹江区域赛K题)(策略,栈)

    Description Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathema ...

  7. Android的各国语言的缩写

    语言包在android工程中的对应关系: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-en ...

  8. nginx与apache 限制ip连接数和带宽方法

    今天有个人问我,nginx怎么限制ip连接数,突然想不起来了,年龄大了,脑子不怎么好使了.还要看一下配置才想起了.那个人又问我,你测试过的吗?一下子把我问蒙了,我真没测试过了,也不知道启作用了没有. ...

  9. 如何在Windows平台使用VS搭建C++/Lua的开发环境

    转自:http://ju.outofmemory.cn/entry/95358 本文主要介绍如何在Windows平台利用VS搭建C++/Lua开发环境.这里的“C++/Lua开发环境”主要指的是C++ ...

  10. inner join ,left join ,right join区别

    inner join ,left join ,right join区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中 ...