在asp.net mvc4中设置会话超时

本文关键字:设置 会话 超时 mvc4 asp net | 更新日期: 2023-09-27 18:21:33

简而言之,我想在会话到期时显示登录页面。为此,我修改了下面显示的web.config中的一些细节,以便测试逻辑是否有效。但遗憾的是,以下逻辑并没有启动

我的期望是在会话到期时转到Account Controller中的Login Action

此外,authentication sectionsession state部分中的超时有什么区别

<authentication mode="Forms">     
  <forms loginUrl="~/Account/Login"  timeout="1" />
</authentication>
<sessionState mode="InProc" timeout="1" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

在asp.net mvc4中设置会话超时

您可以使用如下自定义属性来实现这一点:

public class SessionTimeOutAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContext context = HttpContext.Current;
            // check if session supported
            if ( context.Session != null ) {
                if( context.Session["username"] == null ) {
                   context.Response.Redirect ( "~/Account/Login" );
                }
            }
            base.OnActionExecuting(filterContext);
        }
    }

然后你可以将这个属性应用于你的控制器或类似这样的特定操作:

      [SessionTimeOut]
      public class HomeController : Controller
      {
      }

或行动:

      [SessionTimeOut]
      public ActionResult Index()
      {
         return Index();
      }

根据这个答案,这些超时属性的基本区别是:

<authentication mode="Forms">     
  <forms loginUrl="~/Account/Login"  timeout="1" />
</authentication>

"表单身份验证超时值设置身份验证cookie设置为有效的时间(以分钟为单位)"

<sessionState mode="InProc" timeout="1" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

SessionState超时值设置会话状态提供程序为特定会话在内存(或正在使用的任何后备存储、SQL Server、OutOfProc等)中保存数据所需的时间。

您是否在RegisterGlobalFilters中注册了Authorize筛选器?

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute());
} 

还为您的控制器配置了[授权]注释?