我有一个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”)。
除了滚动我自己的解决方案之外,有没有办法使用内置的表单身份验证来实现它?
提前致谢。
答案 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获取与当前请求关联的当前状态(例如,会话状态)时发生。