• 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

    案例:

     1 // 导入express
     2 const express=require('express')
     3 // 导入cookie中间件
     4 const cookieParser = require('cookie-parser');
     5 
     6 const app = express();
     7 // 使用cookie-parser解析客户端传入的cookie  加密解密
     8 app.use(cookieParser('aa'));
     9 // 向客户端发送cookie
    10 app.get('/send',(req,res)=>{
    11     res.cookie('name','nihao',{maxAge:60*1000,
    12         signed:true,
    13         httpOnly:true
    14     //  domain:fanyi.com
    15 })
    16     res.send('向客户端发送cookie')
    17 })
    18 // 接收服务器端传入的cookie
    19 app.get('/receive',(req,res)=>{
    20     // cookies 是保存前面所有的cookie
    21     res.send('接收到的cookie-->'+req.signedCookies.name)
    22     // res.send('接收到的cookie-->'+req.signedCookies.name)
    23     
    24 })
    25 
    26 
    27 app.listen( 3000,()=>{
    28     console.log(`serve running at http://localhost:3000`)
    29 })

    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发送回服务器。

  • 相关阅读:
    微信支付接口之心酸
    分页之辛酸史
    谈谈面试经历
    Linux(Ubuntu 14.0)
    Android(Xamarin)之旅(五)
    css:befor :after 伪元素的妙用
    js设计模式-代理模式
    html页面元素命名参考
    html5-meta标签和搜索引擎
    iframe框架加载完成后执行函数
  • 原文地址:https://www.cnblogs.com/wszzj/p/12058566.html
Copyright © 2020-2023  润新知