Nodejs—cookie+session的意义以及读写删加密操作(图文)

Nodejs—cookie+session的意义以及读写删操作

cookie

cookie的使用场景:
前端跟服务器请求是一般都是通过http请求,但是http是无状态请求,无法知道用户是否已经访问后,这时候需要用到cookie,当我们访问过服务器之后,服务器会在客户端种植一个cookie,当再次访问的时候,根据cookie就知道用户是否访问过了。

cookie的问题:
cookie有安全性问题。因为cookie是存在客户端,只要是存在客户端的都是存在安全性问题的。
cookie大小有限制(4k)

cookie的写操作

const express = require('express');
const server = express();
server.use('/', (req, res) => {
    res.cookie('user', 'aaa', {
        maxAge: 1*24*3600*1000 // 一个月转换成毫秒
    });
    res.send('ok').end();
})
server.listen(8080);

Nodejs—cookie+session的意义以及读写删加密操作(图文)_第1张图片

cookie的读操作
读操作的时候需要cookie-parser
第一步:cnpm install cookie-parser
第二步:

const express = require('express');
const cookieParser = require('cookie-parser');
const server = express();
server.use(cookieParser());
server.use('/', (req, res) => {
    console.log(req.cookies);
    res.send('ok').end();
})
server.listen(8080);

效果:
在这里插入图片描述
cookie的删除

server.use('/', (req, res) => {
    res.clearCookie('user');
    res.send('ok').end();
})

cookie的加密操作

const express = require('express');
const cookieParser = require('cookie-parser');
const server = express();
server.use(cookieParser('afeagdwf')); // 随便写的签名密钥,防止篡改value值
// 写操作
server.use('/', (req, res) => {
    res.cookie('user', 'poppy', {
        signed: true, // 是否加密
        maxAge: 30*24*3600*1000 // 一个月转换成毫秒
    });
    res.cookie('pass', '1234', {
        maxAge: 30*24*3600*1000 // 不加密
    });
    res.send('ok').end();
})
// 读操作
// 因为cookie有大小限制,加密后的value很长占内存,所以能不加密就不加密
server.use('/', (req, res) => {
    console.log(req.cookies); // 获取为加密的cookie
    console.log(req.signedCookies); // 获取加密的cookie
    res.send('ok').end();
})
server.listen(8080);

效果:user加密 pass加密
在这里插入图片描述
注意:读取时把写操作给注释掉

session

session的应用场景
session是保存在服务端,与cookie作用是一样的,相对cookie来讲session比较安全。
且大小也没有限制,。
那么cookie既然不好用,为什么不删除cookie,我们直接用session就好了嘛?其实不然,session不能独立存在,他是基于cookie的。cookie中会生成一个session的ID,服务器利用session文件中的ID找到session文件,进行读取、写入。

session的读写操作
第一步:cnpm install cookie-session
第二步:

const express = require('express');
const server = express();
const cookieParser = require('cookie-parser');
const sessionParser = require('cookie-session'); // 不能独立存在,依赖cookie
// session必须设置key值
let key = [];
for (var i = 0; i < 1000; i++) {
    key.push('abdsa' + Math.random()) // 10000次,那样循环加密安全
};
server.use(cookieParser());
server.use(sessionParser({
    name: 'aaa', // 改变session的名字
    keys: key, // 必须要设置key值
    maxAge: 1*3600*1000 // 如果你当前不设置过期时间,在一定时间内没有任何操作,那么session会自动的清除掉, 出于安全性考虑,如果设置成无限过期,那么就会给攻击者足够的时间去破解你的session
}));

// session的写操作
server.use('/', (req, res) => {
    if (req.session['num']) {
        req.session['num']++
    } else {
        req.session['num'] = 1
    };
    // session的读操作
    console.log(req.session['num']) // 查看是否在变化,每次签名的session的value值都是不一样的但id都是一样的
    res.send('ok').end();
})

// session的删除
server.use('/', (req, res) => {
    delete req.session['num']
    res.send('11111').end();
})
server.listen(8080);

你可能感兴趣的:(Nodejs)