Asp.net core mvc HttpContext.Session.about()不';我不能在MVC内核中工作。Session.clear不';t注销我的用户
我得到一个错误,上面写着“ISession不包含‘放弃’的定义,并且找不到接受‘ISession’类型的第一个参数的可访问扩展方法‘放弃’” 我尝试过使用session.clear,但即使在注销后,如果我打开网站,用户也会登录 这就是我得到的错误Asp.net core mvc HttpContext.Session.about()不';我不能在MVC内核中工作。Session.clear不';t注销我的用户,asp.net-core-mvc,Asp.net Core Mvc,我得到一个错误,上面写着“ISession不包含‘放弃’的定义,并且找不到接受‘ISession’类型的第一个参数的可访问扩展方法‘放弃’” 我尝试过使用session.clear,但即使在注销后,如果我打开网站,用户也会登录 这就是我得到的错误 这是我在ASP.NET核心项目中实现会话的方式: 创建SessionTimeout筛选器: public class SessionTimeout : ActionFilterAttribute { public override void O
这是我在ASP.NET核心项目中实现会话的方式: 创建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" });
}
我的会话似乎存储在cookie中,在使用会话时未被清除/删除。clear() 所以我用了这个,它看起来很有魅力
foreach (var cookie in Request.Cookies.Keys)
{
if (cookie == ".AspNetCore.Session")
Response.Cookies.Delete(cookie);
}
HttpContext.Session.Clear()在我的帐户/注销页面的控制器中的live站点上不适用于我
我发现将a href设置为/Account/Logout/是个问题。我将链接更改为/Account/Logout
如果您在.NET Core 3.1中遇到会话问题,请尝试以下方法。这也可能解释了为什么我无法让Cookie身份验证发挥作用-我最终放弃了,转而使用会话。可能重复@PeterB您提到的问题没有回答我的问题,因为我已经尝试过会话。这也很清楚,但对我来说仍然不起作用。Tnx a ton Rahul。如果Cookie名称已更改,这从配置中获取名称:
HttpContext.Response.Cookies.Delete(\u sessionOptions.Value.Cookie.name)
其中\u sessionOptions
作为IOptions