如何在asp.net表单身份验证中执行滑动和绝对超时

时间:2013-08-16 15:53:52

标签: asp.net forms-authentication session-timeout

我有一个asp.net应用程序,目前正在使用formsExpiration =“true”的表单身份验证。在web.config中,我们有以下内容:

<authentication mode="Forms">
  <forms loginUrl="Mylogin.aspx" timeout="15" slidingExpiration="true"/>
</authentication>

这完全符合规范:有15分钟的滑动期限。但是,我们现在有一个新的安全要求:用户必须每24小时重新进行身份验证,即使他们一直“活跃”。换句话说,即使您在登录后24分钟内每分钟点击站点中的链接,24小时后,您将自动注销并重定向到登录页面。

但slidingExpriation仅为true / false。据我所知,没有“两个”功能(例如,touchExpirationTimeout =“15”和absoluteExpirationTimeout =“1440”)。

除了滚动我自己的解决方案之外,有没有办法使用内置的表单身份验证来实现它?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Global.asax文件中用户会话开始时的当前时间开始新会话,然后在每个后续请求中,将会话的值与当前时间进行比较,直到它>>到当前时间

void Application_AcquireRequestState(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null)
    {
        DateTime started = (DateTime)HttpContext.Current.Session["SessionStarted"];
        DateTime current = DateTime.Now;
        double totalHours = started.Subtract(current).TotalHours;
        if (totalHours >= 24)
        {
            //end session
        }
    }
}

void Session_Start(object sender, EventArgs e) 
{
    // Code that runs when a new session is started
    Session["SessionStarted"] = DateTime.Now;
}

<强> HttpApplication.AcquireRequestState Event

当ASP.NET获取与当前请求关联的当前状态(例如,会话状态)时发生。