我们有限制跨2个Web应用程序同时登录同一用户的要求。
我们有2个Web应用程序,例如:WebApp1,WebApp2。
用户:仪表板
如果仪表板用户登录到WebApp1,则不允许同一用户登录WebApp2,而是在第二次登录时显示错误消息。
尝试的解决方案:
如果会话处于活动状态,则使用相同的用户ID阻止第二次登录,并向用户显示错误消息。
此想法是在数据库中维护用户ID,应用程序名称和会话ID。在同一用户的第二次登录时,检查数据库表中是否存在针对该用户ID的记录,然后阻止第二次登录并向用户显示错误消息。
在下面清除数据库记录(用户ID,会话ID和应用程序名称) 情况:
不确定如何处理以下情况。
如果第二次登录请求来自有效用户,则管理员应该能够使第一次登录的会话无效,因为该用户是攻击者。
什么是使WebApp2 / WebApp1的Http会话无效的最佳方法?
答案 0 :(得分:1)
如果您确实需要了解第一个会话的状态,则可以跳过尝试管理服务器中的会话的操作,而不必维护客户端的心跳。让客户端每5秒向服务器发送一次请求,以更新“最近一次”记录,该记录包括其IP地址和来源,以及“最近一次”是否是注销事件。
然后另一个应用可以询问“ Last Seen”,如果它超过5秒钟(我实际上会将其提高到10以进行询问)或一个LogOut事件,则假定第一个会话消失了,他们可以免费登录第二个应用程序。如果“ Last Seen”少于5到10秒,请将它们都撞掉,并用两个IP地址提醒管理员,确定应该杀死哪个IP地址。
答案 1 :(得分:0)
除了您拥有的资源外,您还可以将上次活动时间保存在会话数据库中并进行更新,如果有会话更新,则该频率取决于您的要求(例如每个请求或5分钟一次) 。然后,在应用程序/浏览器/系统重新启动的情况下,即使会话存在,即使记录存在,您也要登录该用户。并且您可以拥有一个管理员用户,可以根据需要手动删除条目。
另一种解决方案是始终登录新应用,然后注销旧应用。但这需要在应用程序中引入其他逻辑,以检查会话是否仍然有效。