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

时间:2015-11-11 12:10:11

标签: c# asp.net-mvc-4 web-config session-timeout

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

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

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>

2 个答案:

答案 0 :(得分:1)

您可以使用以下自定义属性实现此目的:

/* rendering to pdf */
$pdf = new Pdf;
$pdf->addPage('

<html>
<head>
<style>
#image{ width:300px; }
</style>
</head>

<body>

<div> AHOJ</div>
<div id="image">
<img src="/mnt/databox/www/myweb/pdf/G6-interactive.svg">
</div>

')

然后,您可以将此属性应用于您的控制器或此类特定操作:

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
      {

      }

答案 1 :(得分:0)

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

<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中注册了授权过滤器?

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

还使用[授权]注释配置您的控制器?