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

5

我有一个使用表单身份验证的asp.net应用程序,目前滑动过期设置为"true"。在web.config中,我们有以下内容:

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

这是所有规范要求的:有一个滑动的15分钟过期时间。然而,我们现在有一个新的安全要求:用户必须每24小时重新进行身份验证,即使他们一直处于“活动”状态。换句话说,即使您在登录后连续24小时每分钟点击网站中的链接,24小时后,您也将自动注销并重定向到登录页面。
但是,slidingExpriation只有true/false。就我所知,没有“both”功能(例如,同时具有slidingExpirationTimeout =“15”和absoluteExpirationTimeout =“1440”)。
除了自己编写解决方案外,是否有一种使用内置表单身份验证实现此功能的方法?
提前致谢。

很不幸,你必须自己动手。如果有用的话,这里有一个不错的例子:http://weblogs.asp.net/andreaszenker/archive/2009/07/10/slidingexpiration-notreally-timeout-notwhatithinkitis.aspx - user1945782
1个回答

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事件

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接