5

我有一个asp.net 应用程序,该应用程序当前使用slidingExpiration="true" 的表单身份验证。在 web.config 中,我们有以下内容:

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

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

但是slidingExpriation 只是真/假。据我所知,没有“两者”功能(例如,slidingExpirationTimeout="15" 和 absoluteExpirationTimeout="1440")。

除了推出我自己的解决方案外,有没有办法使用内置的表单身份验证来实现这一点?

提前致谢。

4

1 回答 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 获取与当前请求关联的当前状态(例如,会话状态)时发生。

于 2013-08-16T16:12:06.377 回答