我的NodeJS使用mysql-node
登录系统。
我遇到的问题是如何保持用户登录,如果他们刷新页面他们必须再次登录,因为我不知道如何存储会话。
我的登录系统是这样的:
socket.on('login', function(data,callBack){
var username = sanitize(data['login']).escape(),
pass = sanitize(data['password']).escape();
var query = connection.query('SELECT uid FROM users WHERE name = ? AND pass = ?', [username,pass],
function(err,results){
if(err){
console.log('Oh No! '+err);
} else if(results.length == 1){
//some how set a session here
} else if(!results.length) {
console.log('No rows found!');
}
});
});
我很难理解如何为每个连接的客户端设置会话。这可能与NodeJS有关吗?
答案 0 :(得分:3)
读到他们为var app分配了express,但是如果我已经有了这个:var app = http.createServer(...我怎么能为它分配express:S有点混乱
您需要了解快速“服务器和本机NodeJS”服务器之间的区别,此处为我的链接comparaison nodejs server vs express server
所以你可以这样做:
var app = express();
var server = http.createServer(app);
这使您可以使用NodeJS保持低级功能。
因此,如果您不想使用现有模块或框架,则可以构建自己的会话管理器:
最好的方法是先用 socket 来实现它,例如:
server.on('connection', function (socket) {
socket.id = id;
});
或
server.on('request', function (req, res) {
req.connection.id = id; // The socket can also be accessed at request.connection.
});
所以,你只需要实现一个检查id的中间件。
如果您想阻止session prediction
,session sidejacking
等,您需要结合使用Cookie,IP,套接字和您的想法,以使其对您的应用更安全。
完成会话管理员后,您可以选择简单的object
,redis
,mongodb
,mysql
中的会话存储位置...(默认情况下express
使用MemoryStore
,但现在可能不会使用{/ p>}
答案 1 :(得分:0)
我不知道nodejs是否具有保存会话的核心功能。你需要使用数据库。使用 Express 将帮助您利用数据库来持久保存用户会话。你最好学习和使用它
答案 2 :(得分:-1)
我认为Nodejs核心中没有任何会话机制。但是,他们有很多库可以让你这样做。我想到的第一个是Connect's session,它是Nodejs的中间件。有关如何使用它的更多详细信息,请查看this question。
查看来自dailyjs的this tutorial,试图将Express的会话包含到记事本webapp中。源代码可用here。 (请注意 Express'会话基于Connect,并且几乎相同)。
编辑:这是使用mongoose进行节点身份验证的更完整example。然而,它们显示了它们的模式,因此我假设您可以轻松地转换到MySQL。