首页 > 解决方案 > HttpContext.Session.Abandon() 在 MVC 核心中不起作用。Session.clear 不会注销我的用户

问题描述

我收到一条错误消息,提示“ISession 不包含‘Abandon’的定义,并且找不到接受‘ISession’类型的第一个参数的可访问扩展方法‘Abandon’”。

我曾尝试使用 session.clear 但即使在我打开网站后注销用户也已登录。

这是我得到的错误

在此处输入图像描述

标签: asp.net-core-mvc

解决方案


这就是我在 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" });
        }

推荐阅读