Session TimeOut和Claims Auth

时间:2015-05-29 06:48:09

标签: asp.net-mvc session-timeout claims-based-identity

我们正在使用.NET Framework 4.5和基于声明的身份验证/授权开发ASP.NET MVC Web应用程序。该应用程序使用标准的ASP.NET机制将令牌保存到cookie中,以读取先前已缓存到内存中的POST之间的声明。

我们在web.config文件中配置了会话超时,如下所示:

<sessionState timeout="1" mode="InProc"/>

发生会话超时时,会调用Session_End事件处理程序:

protected void Session_End(object sender, EventArgs e)
{
    Session.RemoveAll();
    FederatedAuthentication.SessionAuthenticationModule.SignOut();
}

执行Session_End后,会触发Session_Start处理程序:

protected void Session_Start(object sender, EventArgs e)
{
    Breadcrumb breadcrumb = new Breadcrumb();
    Session["Breadcrumb"] = breadcrumb;
}

此行为导致自定义筛选器检查是否存在会话,以便始终返回true:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Get context
        HttpContext ctx = HttpContext.Current;

        // If the browser session has expired...
        if (ctx.Session != null && ctx.Session["Breadcrumb"] == null)
        {
            // Redirect to login page
        }
    }
}

另一方面,如果用户单击“注销”菜单选项,则会调用以下处理程序:

public ActionResult Logout()
{
    FederatedAuthentication.SessionAuthenticationModule.SignOut();
    return RedirectToAction("Login", "Account");
}

在此之后,如果我们在浏览器中输入有效的应用程序URL,则会显示该页面而不会提示输入凭据。这是否意味着令牌仍然有效?

你能告诉我们发生了什么吗?

非常感谢您的帮助。

0 个答案:

没有答案