c# - 在 ASP.NET 中每个用户只允许一个并发登录

标签 c# asp.net session session-state

在 ASP.NET Web 应用程序中是否可以允许每个用户同时登录一次?

我正在开发一个 Web 应用程序,我想在其中确保该网站一次只允许每位用户登录一次。如何检查当前用户是否已经登录?

请建议我们可以处理此问题的正确登录方法。我认为我们应该使用 SQL Server session 状态来处理这个问题。你有什么建议?

我想到了一个解决方案。我们可以这样做:

  1. 当用户登录系统时,我们会在用户列中插入 session ID。 (我们将使用数据库 session ,以便我们可以轻松获取所有 session 相关数据,如 isexpired、expiredatetime 等)。

  2. 当同一个用户再次尝试登录时,我们将检查该 session ID 列并检查 session 是否已过期。如果 session 没有过期,那么我们将不允许用户登录。

  3. 每次用户注销时更新用户 session ID。

请建议这是否是正确的方法。

最佳答案

请引用:

When the same user ID is trying to log in on multiple devices, how do I kill the session on the other device?

开箱即用,.NET 不支持这一点。 .NET 允许并发登录,我相信您已经知道了。

我有同样的要求,并提出了一个非常巧妙的解决方案,在上面的链接中进行了演示。简而言之,我的要求是一次只能有一个用户登录。如果同一个用户 ID 试图在其他地方登录,那么它会通过检查不同 session ID 下的现有登录来终止第一次登录的 session (这使得用户 ID 可以从他们的多个实例登录)他们计算机上的 Web 浏览器 [相同的 session ID],这很常见,但不是来自不同的计算机 [不同的 session ID](例如,可能是由于有人窃取了他们的凭据)。通过修改代码,您可能会更改此行为 - 即阻止第二次登录尝试,而不是终止已经处于事件状态并正在使用的第一次登录。

当然,它可能无法 100% 满足您的需求,因此请随意修改它以满足您的需求。

关于c# - 在 ASP.NET 中每个用户只允许一个并发登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515716/

相关文章:

c# - 使用 MVVM 在 XAML 中禁用 telerik 网格中的特定列

c# - 玩声WinCE

asp.net - 包尝试添加对 GAC 中未找到的 System.Runtime 的引用

html - 打开在 anchor 标记中添加的 mailto :sales@abc. com。在新标签中

php - Codeigniter - 显示与当前 session 的用户 ID 相关的数据库记录

php - 必须登录两次。 Chrome 和 Opera 的 PHP session 和登录问题

c# - 子串深度扫描

c# - DataGridView 绘制错误

javascript - 通过javascript中的复选框禁用控件

php - Yii session 数据不为 CCaptcha 保留