如何在用户从帐户注销时断开事件触发(node.js + express socket.io)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在用户从帐户注销时断开事件触发(node.js + express socket.io)相关的知识,希望对你有一定的参考价值。
我有一个从账户出去的功能:
exports.logout = function(req,res){
req.session.destroy( err => {
if(err)
console.log(err);
res.redirect("/login");
});
};
要使用socket.io并一起表达,我有一个中间件:
io.use(function(socket, next) {
sessionMiddleWare(socket.request, socket.request.res, next);
});
我有使用socket.io的功能。我只有在用户从应用程序注销时才需要断开事件触发。但是现在,当我刷新页面时,我的断开事件始终会发出:
exports.someFunction = function (io) {
io.on('connection', function(socket){
console.log(`Client connected socketId = ${socket.id}`);
console.log("session_id: " + socket.request.session.session_id);
usersMap.set(socket.request.session.session_id, socket.id);
});
socket.on('disconnect', function(){
usersMap.delete(socket.request.session.session_id);
console.log('user disconnected');
console.log("Map size: " + usersMap.size);
});
});
};
请帮助,如何在用户从帐户注销时断开事件触发。对不起我的英语不好。
disconnect
事件根本不符合您的要求。只要用户导航到新页面或刷新当前页面,该事件就会触发。这就是socket.io连接在浏览器中的工作方式。给定连接属于特定页面,并且当加载新页面时,先前连接断开,然后创建新连接。你无法改变它 - 这是浏览器架构的一部分。因此,socket.io disconnect
事件与用户注销时的情况完全不同,并且永远不会相同。
相反,您需要拥有自己的功能来执行注销,用户可以通过页面中的某些操作触发注销。这可以是socket.io消息,来自页面的ajax调用或导航到注销页面。这就是用户可以注销的方式,它与disconnect
事件无关。
同样,connect
事件只是意味着用户(可能已登录或未登录)已连接。登录状态将存储在cookie或服务器端会话中(由cookie索引)。
您不应该为此目的使用socket.io的内置断开连接事件。只要用户与服务器的连接断开(当他离开您的站点或刷新它时发生),它就会被发出,这不等于他或她的注销。
由于您具有服务器端注销功能,因此您可以看到有人注销。
以上是关于如何在用户从帐户注销时断开事件触发(node.js + express socket.io)的主要内容,如果未能解决你的问题,请参考以下文章
Node.js + Web Socket 打造即时聊天程序嗨聊(下)
当到达存储在数据库中的未来日期、时间时,如何在 Node JS 中触发事件?