Cookie简介

cookie是服务器存储在用户计算机中的变量,可以让我们用同一个浏览器访问同一个域名的时共享数据。

HTTP是一种无状态协议,简单来说,当你从一个页面,然后跳转到同站点的另一个页面时,服务是无法识别这是同一个浏览器发送过来的请求。每一次的访问都是没有任何关系的。(对于服务器端来说,每一次访问都是陌生的)

cookie的出现就是为了解决以上问题的。当访问一个页面的时候,服务器在响应消息中命令浏览器在用户的计算机中存储一个字符串;浏览器再次访问同一个站点中的其他页面时,会自动把这个字符串发送给服务器,这时服务器就知道该浏览器之前访问过自己。

第一次访问一个服务器时,服务器在响应消息中命令浏览器存储一个字符串,此后浏览器向这个服务器发送的每一个请求信息都会携带这个cookie

Cookie使用场景

  • 记录用户登录信息
  • 记录浏览历史信息
  • 猜你喜欢

Cookie特点

  • Cookie保存在用户的计算机上
  • 正常设置的Cookie是不加密的,用户可以自由查看
  • 用户可以删除或禁用Cookie
  • Cookie能够存储的数据量很小,逐渐被localStorage替代。
  • Cookie可以被篡改
  • Cookie可以用于攻击(安全性低)

Cookie的基本使用

1、安装

npm install cookie-parser --save-prod

2、导入

const cookieParser = require('cookie-parser');

3、设置中间件

app.use(cookieParser());

4、设置cookie

res.cookie('name', 'zhangsan', {maxAge: 1000 * 60 * 1, httpOnly: true});

5、获取cookie

req.cookies.name

案例:

 // 导入express
const express=require('express')
// 导入cookie中间件
const cookieParser = require('cookie-parser'); const app = express();
// 使用cookie-parser解析客户端传入的cookie 加密解密
app.use(cookieParser('aa'));
// 向客户端发送cookie
app.get('/send',(req,res)=>{
res.cookie('name','nihao',{maxAge:60*1000,
signed:true,
httpOnly:true
// domain:fanyi.com
})
res.send('向客户端发送cookie')
})
// 接收服务器端传入的cookie
app.get('/receive',(req,res)=>{
// cookies 是保存前面所有的cookie
res.send('接收到的cookie-->'+req.signedCookies.name)
// res.send('接收到的cookie-->'+req.signedCookies.name) }) app.listen( 3000,()=>{
console.log(`serve running at http://localhost:3000`)
})

Cookie的配置参数

参数

说明

domain

域名,用于多个二级路由共享Cookie

expires

过期时间(秒),在设置的某个时间点后该Cookie就会失效

maxAge

最大失效时间(毫秒),在多少毫秒后失效

secure

当secure值为true时,cookie在HTTP中是无效的,在HTTPS中才有效

path

如果路径不匹配时,浏览器则不发送Cookie,默认值为 ‘/’

httpOnly

true表示只有在nodejs服务端可以操作Cookie,客户端无法用js脚本操作Cookie

singed

表示是否签名Cookie,设置为true,会对这个Cookie签名,这样就需要用res.singedCookies而不是res.cookies访问它。被篡改的cookie会被服务器拒绝,并且cookie值会被重置为它的原始值。

domain

为响应头中的Domain Set-Cookie属性指定值。默认情况下,不设置域名,大多数客户端将认为cookie仅应用于当前域

encode

指定将用于对cookie值进行编码的函数。由于Cookie的值具有有限的字符集(并且必须是一个简单的字符串),因此该函数可用于将值编码为适合cookie值的字符串。

默认函数是全局encodeURIComponent,它将javascript字符串编码为utf-8字节序列,然后对超出cookie范围的任何内容进行URL编码。

expires

指定日期对象作为Expires Set-Cookie属性的值。默认情况下,不设置过期时间,大多数客户端将此视为“非持久性cookie”,并在退出web浏览器应用程序等条件下将其删除。

注意,cookie存储模型规范指出,如果同时设置了expires和maxAge,那么maxAge优先,但是不可能所有的客户端都遵守这一点,因此,如果同时设置了expires和maxAge,那么它们应该指向同一日期和时间。

httpOnly

指定布尔值,决定是否在Set-Cookie响应头中设置HttpOnly属性。当值为true时,则HttpOnly属性会被设置,否则不会被设置。默认情况下,不设置HttpOnly属性。

注意当设置为true时要小心,因为兼容客户端不允许客户端javascript在document.cookie中看到cookie。

maxAge

指定Max-Age Set-Cookie属性的值(毫秒)。给定的数字将通过四舍五入转换为整数。默认情况下,不设置maxAge。

注意,cookie存储模型规范指出,如果同时设置了expires和maxAge,那么maxAge优先,但是不可能所有的客户端都遵守这一点,因此,如果同时设置了expires和maxAge,那么它们应该指向同一日期和时间。

path

为Path Set-Cookie属性指定值,默认值为 "/"。

secure

为Secure,Set-Cookie属性指定布尔值。当值为true时,设置Secure属性,否则不设置。默认情况下,不设置secure属性。

注意:将此设置为true时要小心,因为如果浏览器没有https连接,客户端将来不会将cookie发送回服务器。

cookie --中间件的更多相关文章

  1. 在ASP.NET Core 中使用Cookie中间件

    在ASP.NET Core 中使用Cookie中间件 ASP.NET Core 提供了Cookie中间件来序列化用户主题到一个加密的Cookie中并且在后来的请求中校验这个Cookie,再现用户并且分 ...

  2. .NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)

    .NET Core 2.0 新时代 万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Stand ...

  3. .NET Core 2.0 Cookie中间件 权限验证

    :在ConfigureServices添加Cookie中间件,使用自定义Scheme services.AddAuthentication(options=> { options.Default ...

  4. 在ASP.NET Core 中使用Cookie中间件 (.net core 1.x适用)

    在ASP.NET Core 中使用Cookie中间件 ASP.NET Core 提供了Cookie中间件来序列化用户主题到一个加密的Cookie中并且在后来的请求中校验这个Cookie,再现用户并且分 ...

  5. .Net Core Identity外面使用Cookie中间件

    1.在 app.UseMvc 前面加上app.UseCookieAuthentication app.UseCookieAuthentication(new CookieAuthenticationO ...

  6. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  7. [转]ASP.NET Core 中的那些认证中间件及一些重要知识点

    本文转自:http://www.qingruanit.net/c_all/article_6645.html 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系 ...

  8. python,django做中间件屏蔽非法访问

    我使用django1.6. django框架没有urlfilter这样的原生中间件,但是灵活的django设计者为我们留下了更自由的渠道. 在没有使用django以前,我没有接触过如此潇洒的编程方式, ...

  9. ASP.NET Core 使用Cookie验证身份

    ASP.NET Core 1.x提供了通过Cookie 中间件将用户主体序列化为一个加密的Cookie,然后在后续请求中验证Cookie并重新创建主体,并将其分配给HttpContext.User属性 ...

随机推荐

  1. python单元测试unittest、setUp、tearDown()

    单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...

  2. jTopo HTML5 Canvas 画图组件

    jTopo是什么? jTopo(Javascript Topology library)是一款完全基于HTML5 Canvas的关系.拓扑图形化界面开发工具包. jTopo关注于数据的图形展示,它是面 ...

  3. 域控权限提升PTH攻击

    0x01 漏洞利用条件 1.被pth攻击的计算机未打补丁(KB2871997)2.拿到一台域成员主机并且拿到管理员组的域用户的NTML 3.对方主机存在相同账号并且是管理员组成员 0x02 本地用户N ...

  4. 「SAP技术」SAP MM 明明有维护源清单,还是不能下PO?

    SAP MM 明明有维护源清单,还是不能下PO? 下午收到用户报错说,创建采购订单失败,报错 :Material ### not included in source list despite sou ...

  5. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  6. Cocos Creator 资源加载流程剖析【六】——场景切换流程

    这里讨论场景切换的完整流程,从我们调用了loadScene开始切换场景,到场景切换完成背后发生的事情.整个流程可以分为场景加载和场景切换两部分,另外还简单讨论了场景的预加载. 加载场景的流程 load ...

  7. Python连载57- 邮件头和主题、解析邮件

    一.添加邮件头,抄送等信息 1.mail["From"]表示发送者信息,包括姓名和邮件 2.mail["To"]表示接收者信息,包括姓名和邮件地址 3.mail ...

  8. react中报错Failed to set an indexed property on 'CSSStyleDeclaration': Index property setter is not supported

    产生这个报错的原因是我当时将样式写到了less文件,我在div中使用的使用应该是使用className = ,而我误写了一个style = .style里面当然没有自定义的className,所以产生 ...

  9. C#中转换运算符explicit、implicit、operator、volatile研究

    C#中的这个几个关键字:explicit.implicit与operator,估计好多人的用不上,什么情况,这是什么?字面解释:explicit:清楚明白的;易于理解的;(说话)清晰的,明确的;直言的 ...

  10. C语言——线性表及其应用

    程序要求 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度.2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68.3.建立一 ...