客户会议在Node.js规划中的应用

客户会议在Node.js规划中的应用
静态网站很容易扩展,您只需要所有的缓存,不必考虑从不同服务器组合到用户的内容。

不幸的是,大多数Web应用程序使用状态内容来提供个性化体验。如果应用程序可以登录,则需要记住用户会话。最典型的方法是在客户端设置一个具有随机唯一会话身份的cookie,并将标识的会话数据保存到服务器。
扩展状态服务

当您扩展服务时,您有三个选择:

来自不同服务器端的同步会话数据
不同的服务器端连接单点中心(get会话)
确保用户访问同一服务器
都是有缺陷的:

同步数据增加性能开销
单点中心缩减系统可扩展性
如果用户最后访问,服务器需要维护什么
但是,如果您以不同的方式考虑它,您会发现第四个选项:在客户端保存会话数据
客户端会话

在客户端保存会话有一些优点:

会话数据是否有效并不重要。
不需要维护服务器端状态。
不需要服务器端同步。
随时添加新服务器
但是客户端会话中存在一个严重的问题:不能保证用户不篡改会话数据。
例如,您将用户ID保存在cookie中,用户很容易修改它以访问其他人的帐户。

这似乎否定了客户端会话的可能性,但是有一种方法可以巧妙地解决这个问题:会话数据的加密和打包(或cookie),这不需要担心用户修改会话数据,服务器将验证数据。

实际应用程序是在cookie中保存加密服务器密钥。服务器密钥被验证有权读取和修改会话数据。这是客户端会话。
节点客户端会话

Node.js已经库实现了客户端会话:节点客户端会话,可代替会话和cookieparser中间件建立连接(节点中间件框架)。

在Express框架应用程序中的应用:

const clientsessions =需要(客户端);

app.use(clientsessions({秘密: / / '0gbljz9ekbt2zbi2flrpvztczcewbxxk设置一个长的随机字符串!})
然后,对req.session对象添加属性

app.get( /登录功能(REQ,RES){ req.session.username = 'johndoe;});
读取属性:

app.get(/功能(REQ,RES){ res.send(欢迎你+请求会话。用户名);});
使用重置方法终止会话:

app.get(/人,功能(REQ,RES){ req.session.reset();});
立即取消角色会话

(注:人物角色是由Mozzilla发起的网络身份认证系统)

与服务器端会话不同,客户端会话的问题是服务器不能删除会话。

当服务器端的架构,你可以删除会话数据。任何客户端会话cookie身份可能不存在。但客户结构、会话数据不在服务器上,不能保证会话数据在每个客户端删除。换句话说,我们不能同步客户端的客户端状态(已经登录)和服务器状态(登录登录)。
为了弥补这个缺陷,客户端会话增加了过期时间。在扩展会话数据(加密包)之前验证到期时间。如果过期,放弃会话数据并更改用户的状态(例如登录登录)。

过期的机制在许多应用程序中运行良好(特别是短时间内的需求)。在角色中,当用户发现密码受到威胁或被损坏时,我们需要提供一种方法让用户立即取消会话数据。

这意味着,一点点的状态信息需要保留在服务的后端。我们即时办理注销的方式是将用户的数据表的一个令牌和会话数据。
每个API调用与会话数据中的令牌和数据库中的令牌进行比较。如果不相同,返回错误信息并退出用户。

这将添加额外的数据库操作查询令牌。幸运的是,大多数API调用需要读取用户数据表并将令牌放在一起。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部