ASP.NET单一登录-分发会话是答案吗
我们有5个平衡的web服务器和各种网站。 我试图实现的是确保一次登录。 i、 e.同一用户帐户在任何给定时间不能多次登录同一网站 我正在考虑解决这个问题的方法是在服务器之间共享会话,这样我就可以控制将哪个会话分配给哪个帐户。然后我可以控制我的登录。如果用户登录并且已经有一个会话分配给他们的用户帐户,我可以终止第一个会话或拒绝登录 我不想失去平衡服务器的好处,因此使用单个Sql Server作为会话状态服务器,或者使用单个服务器处理登录不是一个选项 分布式会话(类似)是实现这一点的正确方法吗ASP.NET单一登录-分发会话是答案吗,asp.net,security,session,distributed,Asp.net,Security,Session,Distributed,我们有5个平衡的web服务器和各种网站。 我试图实现的是确保一次登录。 i、 e.同一用户帐户在任何给定时间不能多次登录同一网站 我正在考虑解决这个问题的方法是在服务器之间共享会话,这样我就可以控制将哪个会话分配给哪个帐户。然后我可以控制我的登录。如果用户登录并且已经有一个会话分配给他们的用户帐户,我可以终止第一个会话或拒绝登录 我不想失去平衡服务器的好处,因此使用单个Sql Server作为会话状态服务器,或者使用单个服务器处理登录不是一个选项 分布式会话(类似)是实现这一点的正确方法吗 或者
或者有没有另一种机制来处理我完全不知道的单一登录?这里有两组问题:
1) 在web场方案中只允许一个连接的用户
2) 检测用户注销
要解决第一个问题,唯一的解决方案是对某种用户状态进行中央存储,使用中央服务器存储ASP.Net会话或其他某种集中式用户状态。此中央存储可以是SQL Server,它使用会话状态的本机管理(顺便说一句,Oracle 11中的Oracle也可以支持会话存储)、AspState服务或外部解决方案,如ScaleOut(如您所说)或其开源替代memcached(请参阅)。或者,您可以设计一个简单的集中式web服务,根据SQL Server数据库检查活动登录,这样您还可以快速创建有关已登录用户等的报告工具。
在我看来,真正的问题在于第二部分,即您需要维护web世界中可用的不同“错误注销”场景(如因崩溃而关闭浏览器或在未注销的情况下关闭应用程序),从而使应用程序能够优雅地与启用旧会话的用户协作(正如您所说,简单地终止第一个会话就可以了)。
还要记住,使用SQL server之类的状态服务器不会使您失去平衡的服务器,如果使用web场环境和共享会话的方式是这样的,那么唯一的问题在于性能(如果会话状态变大)如果您还没有适当的许可证,使用SQL Server所涉及的成本。这里有两组问题:
1) 在web场方案中只允许一个连接的用户
2) 检测用户注销
要解决第一个问题,唯一的解决方案是对某种用户状态进行中央存储,使用中央服务器存储ASP.Net会话或其他某种集中式用户状态。此中央存储可以是SQL Server,它使用会话状态的本机管理(顺便说一句,Oracle 11中的Oracle也可以支持会话存储)、AspState服务或外部解决方案,如ScaleOut(如您所说)或其开源替代memcached(请参阅)。或者,您可以设计一个简单的集中式web服务,根据SQL Server数据库检查活动登录,这样您还可以快速创建有关已登录用户等的报告工具。
在我看来,真正的问题在于第二部分,即您需要维护web世界中可用的不同“错误注销”场景(如因崩溃而关闭浏览器或在未注销的情况下关闭应用程序),从而使应用程序能够优雅地与启用旧会话的用户协作(正如您所说,简单地终止第一个会话就可以了)。
还请记住,使用SQL server之类的状态服务器不会使您失去平衡的服务器,如果使用web场环境和共享会话的方式是这样的,那么唯一的问题在于性能(如果会话状态变大)以及在您还没有适当的许可证的情况下使用SQL server所涉及的成本