防止并发用户会话ASP.NET Core

时间:2016-09-21 20:47:27

标签: c# asp.net cookies asp.net-core

我正在尝试为使用ASP.NET Core和CookieAuthentication中间件的用户阻止多个并发会话。

有关如何执行此操作的任何提示?

理想情况下,一旦用户登录,该应用程序将无效并有效“退出”为该用户发布的所有其他现有Cookie。然后,在与服务器的下一次交互中,旧会话将被重定向到登录页面。到目前为止,我还没有办法做到这一点。

我一直试图找出一种方法来使用documentation中描述的自定义验证器。

谢谢!

1 个答案:

答案 0 :(得分:0)

这就是我处理它的方式(使用ASP.NET Core,但这是无关紧要的):要做到这一点,您需要维护服务器可访问的某个位置。您可以在用户登录时将会话ID存储在数据库中。每个Web应用程序客户端都应该访问心跳URL(例如,每隔几分钟)。心跳的后端检查数据库中的会话ID。如果它是用户的主动,那么一切都很好;否则它会清除cookie。如果您使用到客户端的持久连接(websocket),那么您可以将消息推送到客户端以指示会话不再有效。

如果您需要确保在新会话开始后用户的其他会话不会执行任何其他操作,那么您需要在每个会话上检查会话(如上所述)呼叫。 ASP.NET Core的中间件功能非常适用于此。