在Node.js中,如何防止客户端从我的网站打开多个实例
In Node.js, how to prevent the client from opening more than one instance from my web site
我正在使用node.js语言运行服务器,并且我正在使用express模块,如何防止客户端打开我的网站的多个实例
由于大多数服务器端技术都不可扩展,因为它们需要在服务器端保持状态,所以我选择客户端方法。您可以使用cookie在窗口之间进行通信,并确保在任何给定时间只有一个客户端"拥有"cookie。也许可以使用Raft Consensus Algorithm之类的算法来选择哪个窗口是活动的,然后让另一个窗口显示"不允许多个会话"。
这里有一种方法可以确保每个用户一次只允许使用一个经过身份验证的套接字。
var socketSessions = {};
io.use(function(socket, next) {
var request = {
url: socket.request.url,
headers: {
cookie: socket.request.headers.cookie
}
}
cookieParser(request, {}, function(err) {
if(err) {
return next(err);
}
expressSession(sessionSettings)(request, {}, function(err) {
if(err) {
return next(err);
}
socket.session = request.session;
if(socketSessions[request.session.userId]) {
var oldSocket = socketSessions[request.session.userId];
oldSocket.disconnect();
}
socketSessions[request.session.userId] = socket;
next();
});
});
});
上述代码的假设:1.您正在使用Express。2.您使用的是cookie解析器和express会话。3.您的身份验证机制创建会话。userId
这创建了一个socket.io中间件,它将会话映射到套接字。如果用户有一个新的套接字连接,我们将断开另一个套接字的连接,然后创建一个新套接字/会话映射。
相关文章:
- 如何识别我的网站中的慢速设备
- 用Javascript更改我网站上的字体大小
- 将电视直播频道从网站嵌入我的网站
- 在我的网站上显示最近提交的文章/图片
- 使用API在我的网站Google-Map上显示搜索地址的纬度和经度
- 如果我的内容/网站有名字,我可以用不同的方式设计我的网站吗
- 我如何才能找到哪些网站使用我的jQuery插件
- 错误编码的Adsense广告正在扼杀我的网站's的性能
- 如何重定向到我的html网站youtube嵌入视频打开在youtube应用程序
- 创建类似Facebook的按钮是'窃听'为我的网站
- 在我的网站上使用DogeScript
- 在我的网站上以纯文本形式添加最新推文
- 如何在jsoup的帮助下跟踪我的网站是否加载到android设备上
- 如何在我的网站上嵌入yammer私人信息
- 如何让iPhone用户在我的网站上观看带字幕的视频
- 如何在不影响网站页面速度的情况下在我的网站上使用谷歌字体
- 如何使用XMLHttpRequest()不断地将数据发送到我的网站中的另一个页面
- 如何从重定向的支付处理器网站提取交易详细信息并保存到我的rails 4数据库
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 如何获取我的网站(我的服务器)用户的MAC地址