Cookie

说到Cookie,不管作为前端开发人员还是后端开发人员并不陌生,作为一种最古老、最稳定的客户端存储形式,即便是在当下各种新的客户端存储技术层出不穷的时代,它仍旧有其一席之位。Cookie 使用 HTTP header 发送,具体来说是名为“Cookie”的 HTTP header,每次请求的时候都会由浏览器发送到服务器,同时又从服务器发送到浏览器,是一种双向传输的形式。
=== Request Headers ===
......
Cookie: AGL_USER_ID=f695f47d-f643-46cec-bf63-6255asdasdqwe4b3a24
... ......
以前,每个域名最多只能有 20个 Cookie,但如今的浏览器似乎已经去掉了这个限制(浏览器没有限制它可以拥有的 Cookie 数量),但是最佳的实践是每个域名 50个、大小总计 4KB 的 Cookie 是安全的(Cookie过多有可能导致后台服务报错)。
每个Cookie 对应唯一的域名。这也就意味着在A网站域名上设置的 Cookie 值无法在B网站使用。从而在一定程度上保证了网站的安全,毕竟任何人都不希望其它网站影响自己的网站上使用Cookie。 另外Cookie 也可以对应唯一的子域名。例如, map.baidu.com 是 baidu 网站的一个独立的子域名。你可以创建只有map.baidu,com可以读取的 Cookie,也可以创建 www.baidu.com 和 map.baidu.com 都可以读取Cookie
 
1、创建Cookie
 
     Cookie 默认是没有 API的。要使用 Cookie的话,只需要在代码中写入如下代码。即可创建一个 Cookie
1 document.cookie = 'cookname=cookievalue' // 默认设置

     再者。你还可以设置Cookie的过期时间。我们只需要在 Cookie 值后面使用一个分号然后追加一个exprires的关键字等于一个时间即可

document.cookie = 'cookname=cookievalue;expires=Mon Jul 04 2022 16:36:24 GMT' 

    另外还可以进一步扩展,指定该 Cookie 只对某个域名有效,如下,该Cookie只在域名为www.xxx.com的网站中生效。具体还是根据自己项目的需要来设置
 
document.cookie = 'cookname=cookievalue;expires=Mon Jul 04 2022 16:36:24 GMT; domain=www.xxx.com'
2、读取Cookie
 
    Cookie的读取相对来说就要简单很多的,我们只要通过document.cookie的方式就可以获取到网站上所设置的Cookie,

document.cookie

3、删除Cookie
 
  假使你要删除 Cookie得话,只需要将其过期时间设置成过去的时间即可(名称必须与你想要删除的 Cookie 名称一致)
  

document.cookie = 'cookname=cookievalue; expires=Thu, 01 Jan 1970 00:00:00 GMT'

简易版封装

// 简单封装
const CookieUtile = {
// 设置
setCookie(key, value, time) {
const date_ = new Date()
date_.setDate(date_.getDate() + time) // 当前时间+过期时间
document.cookie = key + '=' + value + ';expires=' + date_ // 写入到document
},
// 设置
getCookie(key) {
const CookieArray = document.cookie.split(';') // 多个cookie通过;分割为多个由'键=值'组成的数组
for (let i = 0; i < array.length; i++) {
const newCookieArray = CookieArray[i].split('=') //去掉中间的等号 得到只有键值组成的新数组
const newCookieKey = newCookieArray[0].replace(/^\s/, '') // 去除多个cookie存值的时候可能出现cookie的值名前面有空格的情况
if (newCookieKey == key) {
return newCookieArray[1]
}
return ''
}
},
// 删除
getCookie(key) {
this.setCookie('name', '', -1);
} }

漫谈客户端存储技术之Cookie篇的更多相关文章

  1. 常见的浏览器端的存储技术:cookie

    工作原理: cookie是存在用户硬盘中,用户每次访问站点时,Web应用程序都可以读取Cookie包含的信息.当用户再次访问这个站点时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie. ...

  2. HTML5之客户端存储(Storage)

    关于客户端存储技术 storage 一.关于客户端(浏览器)存储技术 浏览器的存储技术第一个能想到的应该就是cookie,关于cookie本身出现的初衷是为了解决客户端识别,可存储信息量小(4k左右) ...

  3. 会话技术( Cookie ,Session)

    会话技术:    会话:浏览器访问服务器端,发送多次请求,接受多次响应.直到有一方断开连接.会话结束.        解决问题:可以使用会话技术,在一次会话的多次请求之间共享数据.           ...

  4. 【译】客户端存储(Client-Side Storage)

    本文转载自:众成翻译译者:文蔺链接:http://www.zcfy.cc/article/660原文:http://www.html5rocks.com/en/tutorials/offline/st ...

  5. Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】

    什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话. 为什么我们要使用会话技术 ...

  6. Node.js_express_浏览器存储技术 Cookie(服务器将少量数据交于浏览器存储管理)

    浏览器存储技术 Cookie 服务器将少量数据交于浏览器存储管理 解决 http 无状态协议的问题(无法区分多次请求是否发送自同一客户端) 一个网页一般最多 20个的 cookie,每个 cookie ...

  7. H5的本地存储技术及其与Cookie的比较

    第一部分: H5的本地存储技术 HTML5 提供了两种在客户端存储数据的新方法.先看下面的例子: 例1:var mySelection = {name:"car", amount: ...

  8. Web客户端数据存储学习笔记——Cookie

    今天对登录访问的安全以及web客户端存储做了一些大致的学习,决定在这方面加深理解,记录在博客里.第一个接触到的是Cookie... WHAT? WHY? HOW? 在学习cookie的使用时发现其名称 ...

  9. 客户端技术:Cookie 服务端技术:HttpSession

    客户端技术:Cookie 服务端技术:HttpSession 07. 五 / android基础 / 没有评论   一.会话技术1.什么是会话:客户打开浏览器访问一个网站,访问完毕之后,关闭浏览器.这 ...

随机推荐

  1. Python工程打包

    Python项目打包 我是自己写了一个项目,然后需要打包成问一个exe文件,这样直接打开这个文件就可以运行,而不需要在pycharm中打开相应文件才能运行,也可以将打包好的文件发给其他人,不需要pyc ...

  2. 从零开始,开发一个 Web Office 套件(16):拖动控制点,调整编辑器大小

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  3. HMS Core分析服务助您掌握用户分层密码,实现整体收益提升

    随着市场愈发成熟,开发者从平衡收益和风险的角度开始逐步探索混合变现的优势,内购+广告就是目前市场上混合变现的主要方式之一. 对于混合变现模式,您是否有这样的困惑: 如何判断哪些用户更愿意看广告.哪些用 ...

  4. 【Electron】使用 build-tools 在 Windows 中编译 electron

    [Electron]使用 build-tools 在 Windows 中编译 electron 提前准备 预留好磁盘空间 Git 缓存目录:%UserProfile%/.git_cache ,大概有 ...

  5. 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享

    一.共享桌面原理 共享桌面在直播系统中是一个必备功能 共享者:每秒钟抓取多次屏幕,每次抓取的屏幕都与上一次抓取的屏幕做比较,取它们的差值,然后对差值进行压缩:如果是第一次抓屏或切幕的情况,即本次抓取的 ...

  6. HCNP Routing&Switching之MSTP

    前文我们了解了RSTP保护相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16255918.html:今天我们来了解下MSTP相关话题: MSTP技术背 ...

  7. Sharding JDBC案例实战

    基础分库 以下实例基于shardingsphere 4.1.0 + SpringBoot 2.2.5.RELEASE版本 依赖导入: <properties> <project.bu ...

  8. 五、redis哨兵两套环境同一局域网容灾切换问题

    上周遇到个灵异事件,实验室有两套环境来搭建redis集群和哨兵,分别是: 第一套环境IP:67(master) 65(salve) 66(salve)第二套环境IP:115(master) 116(s ...

  9. 一文带你读懂 Hbase 的架构组成

    hi,大家好,我是大D.今天咱们继续深挖一下 HBase 的架构组成. Hbase 作为 NoSQL 数据库的代表,属于三驾马车之一 BigTable 的对应实现,HBase 的出现很好地弥补了大数据 ...

  10. Celery-Task参数方法

    @celery.task(bind=True, name='name') def function_name(): pass # task方法参数 name : 可以显式指定任务的名字:默认是模块的命 ...