加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 09:39:23 所属栏目:asp.Net 来源:网络整理
导读:我有一个asp.net应用程序,目前正在使用formsExpiration =“true”的表单身份验证.在web.config中,我们有以下内容: authentication mode="Forms" forms loginUrl="Mylogin.aspx" timeout="15" slidingExpiration="true"//authentication 这完全符合规范:有1
我有一个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.据我所知,没有“两个”功能(例如,具有slidingExpirationTimeout =“15”和absoluteExpirationTimeout =“1440”).

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

提前致谢.

解决方法

您可以在用户会话在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获取与当前请求关联的当前状态(例如,会话状态)时发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读