我收到一条错误消息,提示“ ISession不包含'Abandon'的定义,并且找不到可访问的扩展方法'Abandon'接受类型为'ISession'的第一个参数”。
我曾尝试使用session.clear,但即使在注销后,如果我打开网站,该用户也将登录。
这是我得到的错误
答案 0 :(得分:0)
这是我在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" });
}
答案 1 :(得分:0)
似乎我的会话存储在cookie中,使用session.clear()时没有被清除/删除
所以我用了它,它看起来像是一种魅力。
foreach (var cookie in Request.Cookies.Keys)
{
if (cookie == ".AspNetCore.Session")
Response.Cookies.Delete(cookie);
}
答案 2 :(得分:0)
HttpContext.Session.Clear() 在我的帐户/注销页面的控制器中的实时站点上对我不起作用。
我发现设置/Account/Logout/ 的href 是问题所在。我将链接更改为 /Account/Logout。
如果您在 .NET Core 3.1 中遇到会话问题,请尝试此操作。这也可能是我无法使用 Cookie 身份验证的原因 - 我最终放弃并转而使用 Sessions。