node.js - 绕过会话存储将会话直接保存到数据库?
问题描述
我正在使用 SQL Server 作为数据库,但无法让 SQL Server 工作的会话存储 npm 包列出。将 sessionID 直接插入数据库,然后验证客户端发送的 sessionID 与数据库 sessionID 匹配是否有任何问题?我是否需要以某种方式告诉它不要将会话保存在内存中?
const uuidv1 = require('uuid/v1');
const bcrypt = require('bcrypt');
app.use(session({
genid: uuidv1,
name: 'session',
secret: 'thesecretcode',
resave: false,
saveUninitialized: false,
cookie: {
secure: false, /*no https*/
httpOnly: true,
sameSite: true,
maxAge: 600
}
}));
app.all('*', requireAuthentication);
function requireAuthentication(req, res, next) {
console.log(req.sessionID);
if (req.session.user) {
req.session.views++;
console.log(req.session.user)
res.render('home'); /*when logged in*/
} else {
req.session.views = 1;
req.session.user = 'MrUser';
next();
}
}
app.get('/', (req, res) => {
const saltRounds = 10;
bcrypt.hash(req.sessionID, saltRounds, function(err, hash) {
let promise = insert(req.session.user, hash);
});
res.render('landing'); /*when not logged in*/
})
function insert(theuser, sessionID) {
var thequery = "insert into session (sessiondata,sessionid,lasttouchedutc) values(@theuser,@sessionID,getdate())";
return new Promise(function(resolve, reject) {
var con = new msSqlConnecter.msSqlConnecter(config);
con.connect().then(function() {
new con.Request(thequery)
.addParam("theuser", TYPES.VarChar, theuser)
.addParam("sessionID", TYPES.VarChar, sessionID)
.onComplate(function(count, datas) {
resolve(datas);
// res.end()
}).onError(function(err) {
console.log(err);
}).Run();
}).catch(function(ex) {
console.log(ex);
});
});
}
解决方案
使用 Redis 性能更高,但你正在做的很好。会话一直是通过将服务器端 cookie 值与通常存储在 RDBMS 中的值匹配来管理的。
概括:
- 你在做什么很好。
- 使用 Redis 管理会话,因为它比访问 SQL 服务器或任何数据库要快得多
推荐阅读
- python - 如何将不同的html消息发送到不同的电子邮件地址Django python
- javascript - 为扩展脚本(AHK 或命令行)之外的引物运行 adobe Java 脚本
- docker - 删除活动网络接口,我认为是在启动 docker 容器之后
- ios - iOS后台app读取蓝牙广告
- node.js - 如何允许在 AWS HTTP API Gateway 中发送 set-cookie?
- flutter - onPressed 小部件不起作用,当我单击任何视图时,它不会显示任何飞溅动作,颤动
- c# - 在虚拟数据表c#上插入数据
- three.js - ThreeJs - “无法读取未定义的属性‘autoUpdate’”
- airflow - Airflow 1.10.12 的反向移植提供程序包
- javascript - 杂词生成器