Cookie 详解以及实现一个 cookie 操作库
Cookie 详解以及实现一个 cookie 操作库
cookie 在前端有着大量的应用,但有时我们对它还是一知半解。下面来看看它的一些具体的用法
Set-Cookie
服务器通过设置响应头来设置客户端的 cookie,形如:
Set-Cookie: <cookie名>=<cookie值>
可以同时添加多个 Set-Cookie,从而设置多个 cookie 的值。
Set-Cookie 有几个可选项:
Expires/Max-Age
Expires/Max-Age 可以设置过期时间。Expires 为某个日期 GMT 格式。Max-Age 为需要经过的秒数。优先级比 Expires 高。没有设置过期时间,则表示是一个会话期 cookie,在关闭浏览器后,会被移除(浏览器支持会话恢复,保留 cookie)。设置了后叫做持久性 cookie。
Domain 和 Path
Path 设置必须是匹配的路径或者子路径才会发送 cookie。Domain 标识指定了哪些主机可以接受 Cookie。若没有设置则是当前主机(不包括子域名)。否则则为设置的域名(包括子域名)。
Secure 和 HttpOnly
Secure 标志 cookie 只能通过 https 传输。可以防止 xss 攻击。
HttpOnly 表示 cookie 无法通过 javascript 调用。 防止中间人劫持。
SameSite
可以设置 SameSite:SameSite=Strict SameSite=Lax。则 cookie 不跨域发送。
第三方 cookie
如果发送的请求的域和接送的域不同,则请求仍有可能携带目标域的 cookie。如:
```
new Image.src() = https://google.com/xxxx // 无论该链接是否存在都会发送
```
该请求会将 google 的 cookie 携带在请求中发送到 google 的服务器上。因此如果 google 只采用 cookie 鉴权的话。那恶意网站就可以为所欲为的进行它想要的操作了。这就是 csrf 的原理之一。
对于 post,ajax 可以标示 withCredentials 从而跨域携带 cookie,fetch 可以设置 credentials:'include'。
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://a.test/hhh12');
xhr.withCredentials = true;
xhr.send();
fetch('http://a.test/hhhaaaaa12', { credentials: 'include' });
浏览器可以关闭第三方 cookie。(如果应用了 p3p 协议则无法关闭)。
通过第三方 cookie 广告商可以标示用户,从而进行跟踪。
javascript 和 cookie
通过 document.cookie 我们可以获取所有非 http-only 标志的 cookie。document.cookie = newCookie 可以一个新的 cookie。
现在我们来实现一个 mini 的 cookie 操作库:
const Minicookie = {
getItem(cookieName) {
const cookies = document.cookie;
const cookieList = cookies ? cookies.split('; ') : [];
for (const cookieItem of cookieList) {
const [, _cookieName, _cookieValue] = cookieItem.match(/^(.*?)=(.*)/);
if (_cookieName === cookieName) {
return _cookieValue;
}
}
return void 0;
},
setItem(key, value) {
document.cookie = `${key}=${value}`
},
removeItem(key) {
// 通过设置过期时间来实现删除, path也是必须,因为需要知道作用范围,没有设置则会生成一个空的同名属性。
document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`
}
};
参考链接
原文地址:
Cookie 详解以及实现一个 cookie 操作库的更多相关文章
- ASP.NET 操作Cookie详解 增加,修改,删除
ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...
- cookie详解(含vue-cookie)
今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://mp.weixin.qq.com/s/NXrH7R8y2Dqxs9Ekm0u33w 原文如下,记录到此供以 ...
- Session和Cookie详解(1)
面试常问的有关session和cookie的问题: 1.session在分布式环境下怎么解决 2.集群下如何保证session踩中 3.cookie的大小 4.服务器怎么识别一个用户的 5.sessi ...
- [转]Cookie详解
从事 Web 开发已有近17个月:在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感-差不多是了解一二,然而又非真切的明晰:这就使得再用的时候,总要去再搜索一番:如此颇为难受,倒不 ...
- Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie
Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...
- session及cookie详解(七)
前言 文章说明 在每整理一个技术点的时候,都要清楚,为什么去记录它.是为了工作上项目的需要?还是为了搭建技术基石,为学习更高深的技术做铺垫? 让每一篇文章都不是泛泛而谈,复制粘贴,都有它对自己技术提升 ...
- cookie详解
一.cookie详解 (1)设置cookie 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="userId ...
- 网络基础 cookie详解
cookie详解 by:授客 QQ:1033553122 cookie干嘛用的? 参见文章http 会话(session)详解: 网络基础 http 会话(session)详解 cookie分类 ...
- JavaWeb Cookie详解
代码地址如下:http://www.demodashi.com/demo/12713.html Cookie的由来 首先我们需要介绍一下,在Web开发过程中为什么会引入Cookie.我们知道Http协 ...
随机推荐
- ionic4+angular7+cordova上传图片
安装插件 安装插件Image Picker $ ionic cordova plugin add cordova-plugin-telerik-imagepicker $ npm install @i ...
- 无向图的边双连通分量(EBC)
嗯,首先边双连通分量(双连通分量之一)是:在一个无向图中,去掉任意的一条边都不会改变此图的连通性,即不存在桥(连通两个边双连通分量的边),称作边双连通分量.一个无向图的每一个极大边双连通子图称作此无向 ...
- 跟我一起玩Win32开发(8):绘图(A)
从本篇开始,我就不吹牛皮,那就吹吹兔皮吧.说说与绘图有关的东东. 要进行绘制,首先要得到一个DC,啥是DC呢?按字面翻译叫设备上下文,也可以翻译为设备描述表,它主要指API为我们封装了一些与显示设备相 ...
- Suricata的总体架构
Suricata的总体架构 报文检测系统通常四大部分,报文获取.报文解码.报文检测.日志记录:suricata不同的功能安装模块划分,一个模块的输出是另一个模块的输入,suricata通过线程将模块 ...
- 通俗易懂的Nhibernate教程(2) ---- 配置之Nhibernate配置
在上一个教程中,我们讲了Nhibernate的基本使用!So,让我们回顾下Nhibernate使用基本的步骤吧 1.NHibernate配置 ----- 这一步我们告诉了Nhibernate:数据库 ...
- AJPFX总结jvm运行时内存分布
jvm的运行过程中将java程序运行时数据区分为以下几个部分: (1)程序计数器:存储虚拟机字节码执行的地址 (2)java虚拟机栈:java方法运行时的局部变量表,操作数栈,方法出口等 ( ...
- [转载]ant和maven的区别
Ant是软件构建工具,Maven的定位是软件项目管理和理解工具.Maven除了具备Ant的功能外,还增加了以下主要的功能: 1)使用Project Object Model来对软件项目管理: 2)内置 ...
- 微信小程序开发系列七:微信小程序的页面跳转
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
- Netbeans调试教程
官方教程:Netbeans调试 CC++ 项目教程.docx 1.步过: 就是把函数当成一条指令来调用 比如上面就是光执行fun(i),不会到函数里面去 2.步入 就是进入函数里面执行 3.步出 就是 ...
- Socket网络编程初探
http://altboy.blog.51cto.com/5440160/1921720 客户端/服务器架构 即C/S架构,其实web服务在某种意义上也算是C/S架构 一个特点是服务器端持续运行对外提 ...