cookie --中间件
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 --中间件的更多相关文章
- 在ASP.NET Core 中使用Cookie中间件
在ASP.NET Core 中使用Cookie中间件 ASP.NET Core 提供了Cookie中间件来序列化用户主题到一个加密的Cookie中并且在后来的请求中校验这个Cookie,再现用户并且分 ...
- .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 ...
- .NET Core 2.0 Cookie中间件 权限验证
:在ConfigureServices添加Cookie中间件,使用自定义Scheme services.AddAuthentication(options=> { options.Default ...
- 在ASP.NET Core 中使用Cookie中间件 (.net core 1.x适用)
在ASP.NET Core 中使用Cookie中间件 ASP.NET Core 提供了Cookie中间件来序列化用户主题到一个加密的Cookie中并且在后来的请求中校验这个Cookie,再现用户并且分 ...
- .Net Core Identity外面使用Cookie中间件
1.在 app.UseMvc 前面加上app.UseCookieAuthentication app.UseCookieAuthentication(new CookieAuthenticationO ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- [转]ASP.NET Core 中的那些认证中间件及一些重要知识点
本文转自:http://www.qingruanit.net/c_all/article_6645.html 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系 ...
- python,django做中间件屏蔽非法访问
我使用django1.6. django框架没有urlfilter这样的原生中间件,但是灵活的django设计者为我们留下了更自由的渠道. 在没有使用django以前,我没有接触过如此潇洒的编程方式, ...
- ASP.NET Core 使用Cookie验证身份
ASP.NET Core 1.x提供了通过Cookie 中间件将用户主体序列化为一个加密的Cookie,然后在后续请求中验证Cookie并重新创建主体,并将其分配给HttpContext.User属性 ...
随机推荐
- SpringCloud-服务注册与实现-Eureka创建服务提供者(附源码下载)
场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 腾讯云推出一站式 DevOps 解决方案 —— CODING DevOps
在产业互联网的大背景下,如何将人工智能.大数据等前沿技术与实体产业相结合,推动传统企业转型升级,已经成为每一个企业不得不思考的问题.落后的软件研发能力已经拖慢了中国大量企业的数字化转型进程. 为了满足 ...
- docker快速部署本地项目到服务器(tomcat8+mysql8)
目标是:将本地运行的spring项目,部署到服务器上 为什么使用docker? 环境隔离 服务器上,各种环境交杂,使用docker,能清楚的把各个项目进行隔离,不单维护的人员方便,也会省去很多维护这些 ...
- inux 磁盘监控分析
一.查看磁盘空间 1. df -h Size 分割区总容量 Used 已使用的大小 Avail 剩下的大小 Use% 使用的百分比 Mounted on 路径地址 2.查看目录的空间 du -sh ...
- 可编程实验板EPM1270T144C5蜂鸣器音调频率选择
always@(tone) begin case(tone) 'd1 : time_end=10'd1911 ;//L1 'd2 : time_end=10'd1702 ;//L2 'd3 : tim ...
- macbook无法下载软件问题解决
今天新买了一台MacBook Pro,但是发现无法下载软件,在App Store中一直转圈圈. 方法:修改网络DNS为114.114.114.114和8.8.8.8,即可解决.
- IT兄弟连 HTML5教程 CSS3属性特效 3D变换2
3 perspective-origin景深基点 perspective-origin景深基点属性时3D变形中另一个重要属性,主要用来决定perspective属性的源点角度.它实际上设置了X轴和Y ...
- 关联mysql失败_Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon'
关联mysql失败_Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTimezon’ 时区错误,MySQL默认 ...
- Mysql字符串截取_获取指定字符串中的数据
前言:本人遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index('www.sql ...
- Go交叉编译(Go语言Mac/Linux/Windows下交叉编译)
Go交叉编译(Go语言Mac/Linux/Windows下交叉编译) 2019/11/21 Chenxin 在很多时候,由于开发的方便,会有这样的场景出现,使用Mac开发或使用Windows开发,需要 ...