【问题标题】:Unable to check authorization and use session timeout in MVC 5无法在 MVC 5 中检查授权和使用会话超时
【发布时间】:2019-08-24 16:19:15
【问题描述】:

我正在尝试获取一个简单的 MVC 登录项目,该项目将检查正确的用户是否已登录,然后将完成项目导航以保持检查会话超时。

我试过这个 这里是a link! 这里是a link

家庭控制器:

[HttpPost]
    [ValidateAntiForgeryToken]
        public ActionResult About(LoginUser model)
        {

            if (model.UserId == "")
            {
                HttpContext.Session.SetString("UserId", "TestUserLoginID"); //hardcoding for current scenario

            }
            else
            {
                HttpContext.Session.SetString("UserId", model.UserId.ToString());  //hardcoding for current scenario
            }
            return RedirectToAction("Index","Dataaaaa");
        }

数据aaaa控制器: (在这里我想使用超时设置,如果它已过期,那么只需取消所有请求。一种身份验证)

[Timeout]

public class DataaaaaController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }

Timeout.cs:

public class Timeout: ActionFilterAttribute
    {
        private static readonly HttpContext context;
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            if (context.Session == null)
            {
                filterContext.Result = new RedirectResult("~/Home/Index");
                return;
            }
            base.OnActionExecuting(filterContext);
        }
    }

Startup.cs 中的一些变化:

public void ConfigureServices(IServiceCollection services){
//some code
services.AddSession(s => s.IdleTimeout = TimeSpan.FromSeconds(30));
//some code
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//some code
         app.UseSession();
//some code
}

如果输入数据有效(现在是硬编码),我希望用输入数据设置 UserId。完成后,它将登录到应用程序,用户可以做事或导航。但是当 30 秒的空闲时间用完时,它应该无法工作并返回登录页面。

我想我错过了一些东西,一些代码。 还有为什么要使用“ValidateAntiForgeryToken”? 另一个疑问是,如果我想在会话中保存一些登录的用户数据,比如 id 或 name,那么如何进一步访问项目中的 JS 或 html 文件?

很抱歉输入错误和 MVC 新手,所以一半的事情都在上面。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    请参阅以下内容.. 在您的 Global.asax 添加以下类

     public class SessionExpireAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
    
            HttpContext ctx = HttpContext.Current;
            if (HttpContext.Current.Session["userid"] == null)
            {
                filterContext.Result = new RedirectResult("~/Home/Login");
                return;
            }
            base.OnActionExecuting(filterContext);
        }
    }
    

    之后在每个控制器中,为检查此会话添加以下内容

    [SessionExpire] //this will check the session for every requests
    public class HomeController : Controller
    {
    }
    

    如果登录成功,将用户ID插入会话

    System.Web.HttpContext.Current.Session["userid"]="YOUR USER ID"
    

    【讨论】:

    • 首先没有 Global.asax 页面本身。和 HttpContext.Current 引发错误。不存在
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2021-01-09
    • 2010-11-26
    相关资源
    最近更新 更多