asp.net-core-mvc - HttpContext.Session.Abandon() 在 MVC 核心中不起作用。Session.clear 不会注销我的用户
问题描述
我收到一条错误消息,提示“ISession 不包含‘Abandon’的定义,并且找不到接受‘ISession’类型的第一个参数的可访问扩展方法‘Abandon’”。
我曾尝试使用 session.clear 但即使在我打开网站后注销用户也已登录。
这是我得到的错误
解决方案
这就是我在 ASP .NET CORE 项目中实现 Session 的方式:
创建一个 SessionTimeout 过滤器:
public class SessionTimeout : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.HttpContext.Session == null ||!context.HttpContext.Session.TryGetValue("UserID", out byte[] val))
{
context.Result =
new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Pages",
action = "SessionTimeout"
}));
}
base.OnActionExecuting(context);
}
}
在您的 Startup.cs 中注册此过滤器:
在您的 ConfigureServices 方法中:
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
});
在您的配置中添加:
app.UseSession();
最后用你的过滤器装饰你的类/方法,比如:
[SessionTimeout]
public class DashboardController : Controller
要根据您的视图中的注销事件销毁您的会话:
public IActionResult Logout()
{
HttpContext.Session.Clear();
return RedirectToAction("Login", new { controller = "Pages" });
}
推荐阅读
- python - 无法从空序列中选择蝗虫错误
- ios - 使用 Apple 登录:如何将多个应用程序分组到不同的开发者帐户下?
- docker - 如何在 Jenkins Blue Ocean 中运行“sidecar”容器?
- python - 导入这个模块有什么问题?
- vb.net - 有没有办法用用户定义的名称打开一个 IE 窗口。当打开相同的 URL 时,已经打开的 IE 窗口进入前台
- java - 找不到类型 java.sql.Date。您是否缺少对类路径的依赖?当我尝试运行测试时
- angular - 在 Angular 中,如何将我的发布请求的响应作为参数之一传递给另一个发布请求?
- sql-server - 如何使用以下语句创建表
- kubernetes - K3s traefik 入口返回网关超时
- spring - 出现以下错误,有什么解决方法吗?我正在尝试从 OAM 转换为 OKTA 以进行身份验证