cookie

Cookie简介

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

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

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

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

Cookie使用场景

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

Cookie特点

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

Cookie的基本使用

1、 安装
html npm install cookie-parser --save-prod
2、导入
html const cookieParser = require('cookie-parser');
3、设置中间件
html app.use(cookieParser());
4、设置cookie
html res.cookie('name', 'zhangsan', {maxAge: 1000 * 60 * 1, httpOnly: true});
5、获取cookie
html req.cookies.name

Cookie的配置参数

参数说明
domain域名,用于多个二级路由共享Cookie
expires过期时间(秒),在设置的某个时间点后该Cookie就会失效
maxAge最大失效时间(毫秒),在多少毫秒后失效
secure当secure值为true时,cookie在HTTP中是无效的,在HTTPS中才有效
path如果路径不匹配时,浏览器则不发送Cookie,默认值为 ‘/’
httpOnlytrue表示只有在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发送回服务器。

sameSite

sameSite属性限制了cookie的作用域,因此只有当请求是同一个站点时才会附加到这些请求。

  • false,则不设置sameSite属性,cookie将只与相同的站点请求一起发送。
  • true,sameSite属性会被设置成“strict”
  • “strict”,则cookie将只与相同的站点请求一起发送。
  • “Lax”,cookie将与相同的站点请求一起发送,并使用“跨站点”顶级导航。
  • “none”,则cookie将与同一站点和跨站点请求一起发送。
  • 如果sameSite属性的值不是这三个已知关键字,则该属性的值将被视为“none”。

加密Cookie

默认情况下,cookie的信息是以明文的方式保存在用户的浏览器本地,用户可以很轻易地看到cookie的信息。如果我们想让用户看不到cookie的明文信息,可以对cookie信息进行加密。

1、 配置中间件的使用需要传参(用于加密和解密的随机字符串)

用于签署cookie的字符串或数组。这是可选的,如果未指定,将不会分析已签名的cookie。如果提供了字符串,则将其用作密钥。如果提供了一个数组,则将尝试按顺序使用每个密钥对cookie进行签名。

const cookieParser = require(‘cookie-parser’);

app.use(cookieParser(‘123456’));

2、 设置cookie的时候配置signed参数

res.cookie(
‘user’, 
‘zhangsan’, 
{
domain: ‘example.com’, 
maxAge: 6000, 
httpOnly: true, 
signed: true
});

3、 signedCookies访问设置的cookie

console.log(req.signedCookies);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值