ASP.NET Core 登录后 无操作超时 自动退出实现
时间: 2024-10-19 07:10:04 浏览: 13
在 ASP.NET Core 中,实现登录后的无操作超时自动退出通常涉及以下步骤:
1. **启用会话管理**:首先,在 Startup.cs 文件中的 ConfigureServices 和 Configure 方法里,需要添加对 Session 和 IdentityServer 的依赖,以便进行身份验证和会话管理。例如:
```csharp
services.AddSession();
services.AddIdentity<IdentityUser, IdentityRole>(configure => { /* configure.IdentityOptions */ });
```
2. **设置无操作超时**:使用 `ConfigureServices` 配置会话选项,比如设置默认的会话过期时间:
```csharp
services.Configure<SessionOptions>(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30); // 30分钟无操作后过期
options.AutomaticSave = true;
});
```
3. **全局中间件处理**:注册一个全局的 Middleware 用于检查会话是否过期。这通常在 `UseEndpoints` 方法之前添加:
```csharp
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.Response.Redirect("/Account/Login"); // 用户未登录则跳转到登录页
}
else if (await HttpContext.Session.GetDateTimeAsync("LastActivity") <= DateTimeOffset.UtcNow - options.IdleTimeout)
{
// 会话过期,注销用户并重定向到登出页
await context.SignOutAsync(options.AuthenticationScheme);
await context.Response.Redirect("/Account/Logout");
}
else
{
// 更新最后活跃时间
await HttpContext.Session.SetDateTimeAsync("LastActivity", DateTimeOffset.UtcNow);
await next();
}
});
```
这样,如果用户登录后超过预设的无操作时间,中间件会检查当前会话并执行相应的登出操作。
阅读全文