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. java中int的最值解析

    java中int的最大值为十进制的2147483647,也就是java能进行操作的最大数值,超出就会显示不正常.针对以下问题进行讨论. 1.最大值为什么是2147483647? java中int类型占 ...

  2. Vue_transition动画

    1 <!DOCTYPE html> 2 <html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml ...

  3. 使用 shell 脚本自动获取发版指标数据

    问题背景 大一点的公司都会建立一套规章流程来避免低级错误,例如合入代码前必需经过同行评审:上线前必需提测且通过 QA 验证:全量前必需经过 1%.5%.10%.20%.50% 的灰度过程.尤其是最后一 ...

  4. [AcWing 87] 把字符串转换成整数

    点击查看代码 class Solution { public: int strToInt(string str) { int k = 0; while (k < str.size() & ...

  5. [AcWing 36] 合并两个排序的链表

    点击查看代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L ...

  6. ArrayLIst在指定位置插入的内部实现

    今天看到一个问题:ArrayList的add方法有两种使用,那么add到指定位置内部是怎么实现的? 发现自己对这块地方不熟悉,所以立马去看了ArrayList下的源码 // 第一个 public bo ...

  7. Nginx实战|Nginx健康检查

    开源Linux 长按二维码加关注~ 上一篇:盘点提高国内访问Github的速度的9种方案 服务治理的一个重要任务是感知服务节点变更,完成服务自动注册及异常节点的自动摘除.这就需要服务治理平台能够:及时 ...

  8. sqlx操作MySQL实战及其ORM原理

    sqlx是Golang中的一个知名三方库,其为Go标准库database/sql提供了一组扩展支持.使用它可以方便的在数据行与Golang的结构体.映射和切片之间进行转换,从这个角度可以说它是一个OR ...

  9. Docker将镜像文件发布到私服库

    上一篇已经介绍如何将镜像发布到阿里云:https://www.cnblogs.com/sportsky/p/16246394.html 一.创建新镜像文件 1.创建容器并在容器内创建文件 在根目录下创 ...

  10. kNN-识别手写数字

    最后,我们要进行手写数字分类任务,但是现在我们是用kNN算法,可能会比较慢 首先,完整地看完2.3.1和2.3.2的内容,然后找到trainingDigits和testDigits文件夹,大致浏览下 ...