我需要限制用户登录到像5或6最大限制数字.使用退出的用户不算数.

这是针对ASP.NET Core7和使用JWT的.

我试图为在线用户创建一些SQL表,但没有找到任何解决方案.主要的问题是如何获得在线客户.

推荐答案

对于用户跟踪: 您可以在数据库中创建一个表来存储有关活动用户会话的信息.该表应包括UserID、Token、LastActivityTime等字段.

CREATE TABLE ActiveSessions (
    Id INT PRIMARY KEY IDENTITY(1,1),
    UserId INT,
    Token NVARCHAR(MAX),
    LastActivityTime DATETIME
);

然后是用于跟踪的中间件: 这用于跟踪用户活动并更新数据库中的LastActivityTime.

public class SessionTrackingMiddleware
{
    private readonly RequestDelegate _next;

    public SessionTrackingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context, YourDbContext dbContext)
    {
        // Update the LastActivityTime in the database for the current user session
        // You need to extract UserId and Token from the JWT or other authentication mechanism
        var userId = GetUserIdFromContext(context); 
        var token = GetTokenFromContext(context);

        var session = dbContext.ActiveSessions.FirstOrDefault(s => s.UserId == userId && s.Token == token);
        if (session != null)
        {
            session.LastActivityTime = DateTime.Now;
            dbContext.SaveChanges();
        }

        await _next(context);
    }
}

然后,您可以编写用于限制并发登录的类.并确保在Startup.cs的Configure方法中注册了SessionTrackingMiddleware.

app.UseMiddleware<SessionTrackingMiddleware>();

Csharp相关问答推荐

我如何才能获得被嘲笑班级的私有成员?

在ASP.NET中为数据注释 Select 合适的语言

.NET最小API映射将T参数列表为[FromQuery]

如何从顶部提取发票号作为单词发票后的第一个匹配

AutoMapper -如何为两个不同的用例设置单个映射?

应该使用哪一个?"_counter += 1 OR互锁增量(ref_counter)"""

不仅仅是一个简单的自定义按钮

使用C#中的SDK在Microsoft Graph API上使用SubscribedSkus的问题

使用Orleans进行的单元测试找不到接口的实现

如何在CSharp中将json字符串转换为DataTable?

RabbitMQ群集的MassTransit配置问题

如何将%{v_扩展}转换为%{v_扩展}>>

如何在Akka.NET中重新启动执行元时清除邮箱

在';、';附近有错误的语法.必须声明标量变量";@Checkin";.';

使DefaultIfEmpty返回空

NETSDK1201:对于面向.NET 8.0和更高版本的项目,默认情况下,指定RUNTIME标识符将不再生成自包含的应用程序

Excel将';@';添加到具有范围的公式中

如何根据分割文本的块数来计算文本的大小?

异步等待,如何在Windows窗体中使用它们?

C#Web服务转换为 node /Express不工作