• node express 会话管理中间件 --- cookie-parser


    本文转载自:https://www.cnblogs.com/bq-med/p/8995100.html

    cookie是由服务器发送给客户端(浏览器)的小量信息。

    我们知道,平时上网时都是使用无状态的HTTP协议传输出数据,这意味着客户端与服务端在数据传送完成后就会中断连接。这时我们就需要一个一直保持会话连接的机制。在session出现前,cookie就完全充当了这种角色。也就是,cookie的小量信息能帮助我们跟踪会话。一般该信息记录用户身份。

    当然cookie也常记录跟踪购物车的商品信息(如数量)、记录用户访问次数等。

    cookie-parser 的作用就是设置,获取和删除 cookie。

    复制代码
    var express = require('express');
    
    //引入cookie-parser模块
    var cookieParser = require("cookie-parser");
    
    //创建express实例
    var app = express();
    
     // 设定监听端口
    app.set('port', process.env.PORT || 3000);
    
    //创建cookie实例
    app.use(cookieParser());
    
    app.use("/login", function(req,res){
        //获取cookie
        console.log(req.cookies);
        
        //设置cookie,关闭签名
        res.cookie("user", {username: req.body.username}, {maxAge: 600000 , httpOnly: true, 'signed': false});
    });
    
    //监听3000端口
    var server = app.listen(app.get('port'),function(){
        console.log("创建成功!")
    });   
    复制代码

    引入

    var cookieParser = require('cookie-parser');    #引入模块
    app.use(cookieParser());        #挂载中间件,可以理解为实例化

    这两行代码默认在app.js中写好了,表示现在可以直接使用 cookie 了。

    创建cookie

    res.cookie(name, value [, options]);

    name 是 cookie 名,value 是 cookie 值,可以是 json 对象或字符串。options 是选项,常用选项有:

    {
        'maxAge': 90000,    # 有效时长,即90000毫秒后过期,String
        'signed': false     # 默认为false,表示是否签名,Boolean
    }

    创建 cookie 会在 http 响应头中添加Set-Cookie,从而在浏览器中设置 cookie

    获取cookie

    var cookies = req.cookies      # 获取cookie集合
    var value = req.cookies.key    # 获取名称为key的cookie的值

    删除cookie

    res.clearCookie(name [, options])

    name 是 cookie 名,options 与创建 cookie 时所传一致 

    签名

    上面所写 cookie 的各种操作,都是没有经过签名的。签名可以提高安全性。下面是使用签名生成 cookie 的方法,大同小异,修改上文即可:

    修改实例配置:

    app.use(cookieParser('ruidoc')); # 需要传一个自定义字符串作为secret

    修改创建cookie配置

    # 创建cookie的options中,必填 signed: true
    res.cookie(name, value, {    
        'signed': true
    });

    修改获取cookie方式:

    var cookies = req.signedCookies      # 获取cookie集合
    var value = req.signedCookies.key    # 获取名称为key的cookie的值

    使用cookie记住密码

    方案1: 

        直接把用户名与密码都保持到Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。这是一种比较危险的选择,一般不把密码等重要信息保存到Cookie中。 

    方案2: 

        把密码加密后保存到Cookie中,下次访问时解密并与数据库比较。这种方案略微安全一些。如果不希望保存密码,还可以把登录的时间戳保存到Cookie与数据库中,到时只验证用户名与登录时间戳就可以了。 

    方案3: 

        实现方式是把账号按照一定的规则(密钥)加密后,连同账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否相同即可。 

  • 相关阅读:
    【笔记】正则表达式
    领养信息详情
    CCF201503-3(python)
    RBZ general course notes
    接入腾讯 验证码
    数据分析工具GrowingIO的使用
    js中的位运算
    es6中类中的静态属性、实例属性、静态方法、实例方法的个人理解
    分析 腾讯的 实时音视频web端demo代码
    摸索在web端使用腾讯云的实时音视频;跑通web端demo
  • 原文地址:https://www.cnblogs.com/Sky-Ice/p/9447502.html
Copyright © 2020-2023  润新知