nodejs--cookie & session 总结

版权声明:本文为博主原创文章,喜欢的话,可以通知我后进行转载哦! https://blog.csdn.net/maidu_xbd/article/details/86645359

http无状态协议

HTTP无状态协议,是指协议对于事务处理没有记忆能力。服务器无法识别两条http请求是否是同一个用户发送的。也就是说服务器端并没有记录通信状态的能力。为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态。Cookie和Session就是解决交互存储状态的技术,

cookie:

cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中。不安全、有限(4K)

(1)发送cookie

res.cookie(名字, 值, {path: '/', maxAge: 毫秒});

const express = require('express');

var server = express();

//cookie
server.use('/aaa/index.html', function (req, res) {
    //发送cookie---res.cookie(名字, 值, {path: '/', maxAge: 毫秒});
    res.cookie('user', 'buding', { path: '/aaa', maxAge: 30 * 24 * 3600 * 1000 });
    res.send('ok');
});

server.listen(8080);

(2)读取cookie——cookie-parser

server.use(cookieParser('密钥'));------签名

server.use(function (){

             req.cookies                未签名版

             req.signedCookies   签名版

});

const express = require('express');
const cookieParser = require('cookie-parser');

var server = express();

//cookie
server.use(cookieParser());
server.use('/aaa/index.html', function (req, res) {
    //发送cookie---res.cookie(名字, 值, {path: '/', maxAge: 毫秒});
    res.cookie('user', 'buding', { path: '/aaa', maxAge: 30 * 24 * 3600 * 1000 });
    res.send('ok');
    //读取cookie——需要cookie-parser
    console.log(req.cookies);
});

server.listen(8080);

(3)删除cookie

res.clearCookie(名字);

const express = require('express');
const cookieParser = require('cookie-parser');

var server = express();


//cookie
server.use(cookieParser('w5frf6gbd2'));  //设置签名

server.use('/', function (req, res) {
    //req.secret='w5frf6gbd2';  //可不写
    res.cookie('user', 'buding', { signed: true });

    console.log('签名cookie:', req.signedCookies)
    console.log('未签名cookie:', req.cookies);
    res.clearCookie('user'); //删除cookie
    res.send('ok');
});

server.listen(8080);

(4)cookie-encrypter----加密

session:

Session是基于cookie实现的,cookie中会有一个session的ID,服务器利用sessionid找到session文件。Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。安全、无限

隐患:session劫持

const express = require('express');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');

var server = express();

//cookie
var arr = [];

for (var i = 0; i < 100000; i++) {
    arr.push('sig_' + Math.random());
}

server.use(cookieParser());
server.use(cookieSession({
    name: 'buding',
    keys: arr,
    maxAge: 2 * 3600 * 1000
}));

//读取session ---- req.session
server.use('/', function (req, res) {
    if (req.session['count'] == null) {
        req.session['count'] = 1;
    } else {
        req.session['count']++;
    }

    console.log(req.session['count']);

    res.send('ok');
});

server.listen(8080);

猜你喜欢

转载自blog.csdn.net/maidu_xbd/article/details/86645359