node中的session的具体使用

2020-06-17 05:52:11易采站长站整理

session存入mongoDb

首先,得安装connect-mongo模块


npm i connect-mongo --save

代码如下:


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

var MongoStore = require('connect-mongo')(session);
const hour = 1000 * 60 * 60

var app = express()
app.use(cookieParser())
app.use(session({
secret: 'a cool secret',
key: 'mongo_sid',
cookie: { maxAge: hour * 8, secure: false },
resave: true,
saveUninitialized: true,
store: new MongoStore({
url: 'mongodb://@localhost:27017/demodb'
})
}));

app.use(function(req, res, next) {
if (req.url === '/favicon.ico') {
return
}

var sess = req.session;
var id = req.sessionID; // session ID, 只读
console.log(sess, id);

if (sess.views) {
sess.views++;
} else {
sess.views = 1;
}

res.setHeader('Content-Type', 'text/html');
res.write('<p>views: ' + sess.views + '</p>');
res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
res.write('<p>httpOnly: ' + sess.cookie.httpOnly + '</p>');
res.write('<p>path: ' + sess.cookie.path + '</p>');
res.write('<p>secure: ' + sess.cookie.secure + '</p>');
res.end();
});

app.listen(4000);

运行后,刷新浏览器页面,在demodb数据库中的sessions集合中发现已经存入了如下session信息。

可能会有人问:结果是看到了,但这过程中到底发生了什么呢?

其实,当浏览器发起第一次请求时,session中间件会生成一个

session对象
(其中包含cookie信息),这个session对象会存入mongoDb数据库中,同时,请求返回时,浏览器客户端会自动将这个session对象中的cookie保存起来,注意哦,浏览器存的可是cookie,而不是session对象。

这个cookie有一个过期时间,比如,上面代码中设置的是8小时。也就是说,8小时后,这个cookie在浏览器中会自动消失。

最后

现在,你弄清楚session和cookie之间的关系了吗?下一篇我将对

node中的密码安全
进行介绍,敬请期待哦。